df <- data.frame(x=1:10)
我可以根据一个条件改变多个列吗?
例如,我可以这样做:
df %>% mutate(y = if_else(x>3,"Y","N"), z = if_else(x>3,"YY","NN"))
但是由于条件是相同的(
x>3
)我想知道是否有其他方法而不必重复。
或许你可以尝试一下
cbind(
df,
`row.names<-`(data.frame(
y = c("N", "Y"),
z = c("NN", "YY")
)[(df$x > 3) + 1, ], NULL)
)
这给出了
x y z
1 1 N NN
2 2 N NN
3 3 N NN
4 4 Y YY
5 5 Y YY
6 6 Y YY
7 7 Y YY
8 8 Y YY
9 9 Y YY
10 10 Y YY
或者,像这样使用
ifelse
怎么样(但这效率很低,我不推荐它)?
cbind(
df,
with(
df,
do.call(
rbind,
ifelse(x > 3,
list(data.frame(y = "Y", z = "YY")),
list(data.frame(y = "N", z = "NN"))
)
)
)
)
这给出了
x y z
1 1 N NN
2 2 N NN
3 3 N NN
4 4 Y YY
5 5 Y YY
6 6 Y YY
7 7 Y YY
8 8 Y YY
9 9 Y YY
10 10 Y YY