2017-09-22 1 views
0

하나의 문자열 (변수)을 가진 여러 변수가있는 데이터 프레임이 있는데 an 변수의 문자열이 string 열에 나타나는지 확인하려고합니다. 각 an 변수에는 해당하는 cn 변수가 있습니다. 예를 들어 c1a1의 문자열이 string에 나타나는 경우 Checked이 포함되도록하고 싶습니다. 나는 이것을 위해 루프 솔루션을 개발했는데 (이 포스트의 끝에있는 예제 데이터), 더 빠르고 코드 작성하기 쉬운 패밀리 솔루션이 있는지 궁금해하고 있단 말인가? 실제 데이터에는 100 개 이상의 a 및 c 변수가 있습니다.여러 for 루프에 패밀리 솔루션을 적용 하시겠습니까?

#For loop solution 

for (var in seq(2, 10, 2)){ 
    for (i in 1:nrow(df)){ 
    df[i, var]<-ifelse(grepl(df[i, var-1], df$string[i])=="TRUE", "Checked", "Unchecked") 
    } 
} 


#### Example data #### 
a1<-c("zebra", "giraffe", "elephant") 
a2<-c("hyena", "monkey", "antelope") 
a3<-c("badger", "deer", "kangaroo") 
a4<-c("tiger", "lion", "coyote") 
a5<-c("penguin", "bear", "gorilla") 

c1<-"" 
c2<-"" 
c3<-"" 
c4<-"" 
c5<-"" 

string<-c("elephant/bear/coyote/penguin/monkey", 
      "giraffe/antelope/monkey/gorilla/tiger", 
      "elephant/antelope/kangaroo/coyote/gorilla") 

df<-cbind.data.frame(a1, c1, a2, c2, a3, c3, a4, c4, a5, c5, string, 
stringsAsFactors=F) 

답변

0

당신은이 작업을 수행 할 수 있습니다 사용하여, 당신이 무엇을 요구 할 것입니다. 임의의 수에 대해 일반화 할 수 있습니다. 기지국에서 R

require(dplyr) # For readability 
a<-cbind.data.frame(a1, a2, a3, a4, a5, stringsAsFactors=F) 

a %>% 
    sapply(function(x) {mapply(function(a) grepl(a, string), x) %>% diag}) %>% 
            # Check for condition in above line 
    ifelse("Checked", "Unchecked") %>% # Convert True and False to Checked and Unchecked 
    data.frame %>%      # Convert to data.frame 
    setNames(paste0("c", 1:5))   # Setnames 

     c1  c2  c3  c4  c5 
1 Unchecked Unchecked Unchecked Unchecked Checked 
2 Checked Checked Unchecked Unchecked Unchecked 
3 Checked Checked Checked Checked Checked 

c_column = data.frame(ifelse(sapply(a, function(x) diag(mapply(function(a) grepl(a, string), x))), "Checked", "Unchecked")) 
names(c_column) = paste0("c", 1:5) 
0

sapply

df[,2*(1:5)] <- t(sapply(1:nrow(df), 
        function(i) sapply(2*(1:5)-1, 
         function(j) c("Unchecked","Checked")[1+grepl(df[i,j], df$string[i])] 
       ))) 

df 
     a1  c1  a2  c2  a3  c3  a4  c4  a5  c5         string 
1 zebra Unchecked hyena Unchecked badger Unchecked tiger Unchecked penguin Checked  elephant/bear/coyote/penguin/monkey 
2 giraffe Checked monkey Checked  deer Unchecked lion Unchecked bear Unchecked  giraffe/antelope/monkey/gorilla/tiger 
3 elephant Checked antelope Checked kangaroo Checked coyote Checked gorilla Checked elephant/antelope/kangaroo/coyote/gorilla 
관련 문제