我有一个简单的数据框,我想使用X
转换列dplyr
,以便从20
中的所有元素中减去常量值X
,如果并且只有I==1
。
library(dplyr)
myData<-data.frame(
I=as.factor(c(1,2,1)),
X=c(4,2,3)
)
如何实现此行为。我的第一次尝试是使用:
result<-myData%>% filter(I==1) %>% mutate(X=X-20)
但现在我不知道如何将result
合并回myData?我也试过mutate_if
,但我不确定如何使用它。
基本的R替代解决方案可能是:
myData$X[myData$I==1]=myData$X[myData$I==1]-20
但正如我所说,我正在寻找一个dplyr解决方案:
答案 0 :(得分:4)
使用if_else
:
myData %>%
mutate(X = X - if_else(I == "1", 20, 0))
# Or
myData %>%
mutate(X = if_else(I == "1", X - 20, X))
# I X
# 1 1 -16
# 2 2 2
# 3 1 -17