2017-06-28 20 views
2

我有一個DF像這樣不同因素兩個層面:粘貼的給定條件語句

df<- data.frame(result=c("p","p","p","d","d","p"),lep=c("A", "C", "E", "F","G", ""), psit= c("B", "D", "F", "G","H", "")) 

我想提出一個新列paste該貼的不同因素兩個層面在一起,如果滿足以下要求:1)必須result = p 2)LEP和PSIT列不爲空

和輸出應如下所示:

output<- data.frame(result=c("p","p","p","d","d", "p"),lep=c("A","C", 
"E", "F","G", ""), psit= c("B", "D", "F", "G","H",""), paste= 
c("A_B","C_D", "E_F", "", "","")) 

我已經嘗試了以下但沒有成功。我相信這是因爲我沒有正確使用粘貼功能:

df<-df %>% 
group_by(result) %>% 
    mutate(interact2=ifelse(psit==""| lep==""|result!="p", psit, 
        paste0(lep, psit, sep= "_"))) 
+1

你有一大堆的事情在這裏混了分配。你不是在尋找'result!=「psit」' - 你想要'結果!=「p」'。您正在使用'paste0'而不是'paste'。最後,當條件不匹配時,您返回'psit'而不是'「」'(空白)。 – thelatemail

回答

1

由於@thelatemail建議這種情況似乎混淆了。我也不認爲你在這裏需要group_by

library(dplyr) 
df %>% 
    mutate(paste = ifelse(result == "p" & (lep != "" & psit != ""), 
        paste(lep, psit, sep = "_"), "")) 

# result lep psit paste 
#1  p A B A_B 
#2  p C D C_D 
#3  p E F E_F 
#4  d F G  
#5  d G H  
#6  p    
0

這裏是data.table選項到位

library(data.table) 
setDT(df)[result == "p" & lep !="" & psit != "", paste := paste(lep, psit, sep="_")][]