2016-06-30 1 views
2

Предположим, что у нас есть кадр данных, как показано ниже:Заменить общую строку через два столбца со строкой из другого столбца в dataframe в R

test<-data.frame(v1=c(1:10),v2=c(rep("a x",10)),v3=c(rep(c("a b","a c","a d","a e","a f"),2)),v4=c((rep("p",5)),rep("q",5))) 

В принципе, нам нужно заменить «а» в строках колонн 2 и 3 с строкой, указанной в колонке 4. фрейм данных результата в идеале должен выглядеть следующим образом:

result<-data.frame(v1=c(1:10),v2=c(rep("p x",5),rep("q x",5)),v3=c("p b","p c","p d","p e","p f","q b","q c","q d","q e","q f"),v4=c((rep("p",5)),rep("q",5))) 

попытался следующий, чтобы получить тот же:

for (i in 1:nrow(test)) 
{ 
test[i,2]<-gsub("a",test[i,4],test[,2]) 
test[i,3]<-gsub("a",test[i,4],test[,3]) 
} 

Вы также попытались использовать функции приложения, но не смогли достичь желаемого результата.

Любая помощь в этом отношении будет высоко оценена. Заранее спасибо!

ответ

1

Мы можем цикл по столбцам, удалите «а» и paste с «v4»

test[2:3] <- lapply(test[2:3], function(x) paste0(test$v4, sub("a", "", x))) 
1

Возможно, это? (Не знаю, как родовое вам нужен код, чтобы быть)

test2 <- test 
test2$v2 <- mapply(gsub , "a" , test$v4 , test$v2) 
test2$v3 <- mapply(gsub , "a" , test$v4 , test$v3)