按要素有条件地改变列

时间:2018-01-25 11:04:57

标签: r dplyr

我有一个简单的数据框,我想使用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解决方案:

1 个答案:

答案 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