df <- data.frame(x=1:10)

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

例如,我可以这样做:

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

但由于情况是一样的(x>3),我想知道是否有其他方法可以不必重复.

推荐答案

Update

感谢来自@thelatmail的 comments ,以下是您感兴趣的方法

df[c("y","z")] <- lapply(list(c("Y","N"), c("YY","NN")), \(x) ifelse(df$x > 3, x[1], x[2])  )

Previous

也许你可以试一试

cbind(
    df,
    `row.names<-`(data.frame(
        y = c("N", "Y"),
        z = c("NN", "YY")
    )[(df$x > 3) + 1, ], NULL)
)

或者dplyr

df %>%
    cbind({
        data.frame(
            y = c("N", "Y"),
            z = c("NN", "YY")
        )[((.)$x > 3) + 1, ]
    }) %>%
    `row.names<-`(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

R相关问答推荐

为什么当我try 在收件箱中使用合并功能时会出现回收错误?

用相同方法得到不同函数的ROC最优截断值

制作等距离的线串副本

R函数‘paste`正在颠倒其参数的顺序

非线性混合效应模型(NLME)预测变量的置信区间

合并DFS列表并将索引提取为新列

可以替代与NSE一起使用的‘any_of()’吗?

如何通过判断数据框的一列来压缩另一列?

在保留列表元素属性的同时替换列表元素

有没有一种方法可以同时对rhandsontable进行排序和从rhandsontable中删除?

我如何go 掉盒子图底部的数字?

R如何将列名转换为更好的年和月格式

在R中使用列表(作为tibble列)进行向量化?

观察器中的inaliateLater的位置

如何使用FormC使简单算术运算得到的数字是正确的?

R中时间间隔的大向量与参考时间间隔的相交

在GT()中的列之间添加空格

识别部分重复行,其中一行为NA,其重复行为非NA

根据用户输入更改标记大小和 colored颜色 (R)

从多行中 Select 最小值