2016-01-25 4 views
-1

я следующие 2 строки -Создать другую переменную комбинацию

mystring_ad <- "10:20:30" 
mystring_pwr <- "010:020:030" 

Я хочу, чтобы создать кадр данных, содержащий все возможные combinatoins, принимающие значения от обеих переменных --- Данные должны выглядеть -

10 010 
10 020 
10 030 
20 010 
20 020 
20 030 

Я хочу сделать это с помощью петель. Может кто-нибудь предложить, как написать код для этого, используя r

Я хочу добавить еще один столбец «Переменная» слева от данных. строк в столбце должны быть равны длине строки комбинации («res», как указано в ответе. Кроме того, те же имена переменных должны быть реплицированы во всех рядах. Как это сделать?

данные должны выглядеть -

Variable adstock power lag 
Var1  10  010 0 
Var1  10  020 0 

так на

ответ

3

Вам даже не нужно для петель

s_ad <- strsplit(mystring_ad, ':')[[1]] 
s_pwr <- strsplit(mystring_pwr, ':')[[1]] 
res <- expand.grid(s_ad, s_pwr) 
0

Я определенно предпочитаю danas.zuokas решение Но, быть просто.. потому что я уже начал играть с этим, и вы можете быть заинтересованы в делать это с петлями, вот оно:

mystring_ad <- "10:20:30" 
mystring_pwr <- "010:020:030" 

mystring_ad_splitted <- unlist(strsplit(mystring_ad,":")) 
mystring_pwr_splitted <-unlist(strsplit(mystring_pwr,":")) 


ads <- vector() 
pwrs <- vector() 
counter <-1 

for (i in 1:length(mystring_ad_splitted)){ 


    ad<-mystring_ad_splitted[i]; 
    for (ii in 1:length(mystring_pwr_splitted)){ 
      pwr<-mystring_pwr_splitted[ii] 
      ads[counter]<-c(ad) 
      pwrs[counter]<-c(pwr) 
      counter<-counter+1 
    } 

} 

resultDF <-data.frame(ads,pwrs) 
+0

Большое спасибо! Это действительно большая помощь –

0

Использование цикла:

mystring_ad <- "10:20:30" 
mystring_pwr <- "010:020:030" 

mystring <- data.frame("mystring_ad"=NA, "mystring_pwr"=NA) 
mystring <- mystring[0,] 
for (i in strsplit(mystring_ad, split = ":")[[1]]) { 
    for (j in strsplit(mystring_pwr, split = ":")[[1]]) { 
    indx <- nrow(mystring) + 1 
    mystring[indx, "mystring_ad"] <- i 
    mystring[indx, "mystring_pwr"] <- j 
    } 
} 

проще вариант без цикла:

mystring <- data.frame("mystring_ad" = rep(strsplit(mystring_ad, split = ":")[[1]], each = length(strsplit(mystring_pwr, split = ":")[[1]])), 
          "mystring_pwr" = rep(strsplit(mystring_pwr, split = ":")[[1]], length(strsplit(mystring_ad, split = ":")[[1]])))