根据单一条件改变几列

问题描述 投票:0回答:1
df <- data.frame(x=1:10)

我可以根据一个条件改变多个列吗?

例如,我可以这样做:

df %>% mutate(y = if_else(x>3,"Y","N"), z = if_else(x>3,"YY","NN"))

但是由于条件是相同的(

x>3
)我想知道是否有其他方法而不必重复。

r dplyr
1个回答
0
投票

或许你可以尝试一下

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
© www.soinside.com 2019 - 2024. All rights reserved.