2012-10-11 31 views
0

我有問題添加列有條件的df。例如,我想根據Var A的值將列值添加到VarB和VarC列。添加列條件檢查行名

例如,當VarA等於「a」,「c」時,我想向VarB添加'yes'當「e」和「no」等於「b」和「d」時。另外,當VarA等於「a」或「e」時,我想向VarC添加「1」;當VarA等於「b」或「d」時,VarC爲「2」;而當VarA等於「c」時,VarC爲「3」。

VarA 
a  
b  
c  
d  
e 

任何提示?

+0

把你的代碼,這將有助於幫助你 –

回答

1

做一下下面的精神:

cond1 <- data$VarA %in% c("a","c","e") 
data$VarB[cond1] <- "yes" 
cond2 <- data$VarA %in% c("b","d") 
data$VarB[cond2] <- "no" 
cond3 <- data$VarA %in% c("a","e") 
data$VarC[cond3] <- 1 
cond4 <- data$VarA %in% c("b","d") 
data$VarC[cond4] <- 2 

,我就不打擾你自己做的最後一個。

+0

您可以避免'cond2'和'cond4'如果你只是做'!cond1'和'!cond3',分別。例如'data $ VarB [!cond1] < - 「no」' –

+0

好吧,但我認爲這是一個普遍的問題,即您提到的好財產可能只是一個巧合。 – mpiktas

3

也許這可能是有用的

DF <- data.frame(VarA=letters[1:4]) # this is your data.frame 
    VarA 
1 a 
2 b 
3 c 
4 d 

DF$VarB <- ifelse(VarA %in% c('a','c','e'), 'yes', 'no') 
DF$VarC <- ifelse(VarA %in% c('a','e'), 1, ifelse(VarA %in% c('b','d'),2,3)) 
DF 
    VarA VarB VarC 
1 a yes 1 
2 b no 2 
3 c yes 3 
4 d no 2 

可以使用transform功能以及。

DF <- data.frame(VarA=letters[1:4]) 
transform(DF, 
      VarB=ifelse(VarA %in% c('a','c','e'), 'yes', 'no'), 
      VarC=ifelse(VarA %in% c('a','e'), 1, ifelse(VarA %in% c('b','d'),2,3))) 
    VarA VarB VarC 
1 a yes 1 
2 b no 2 
3 c yes 3 
4 d no 2 
+1

完美使用'transform()';) – A5C1D2H2I1M1N2O1R2T1