如何在dplyr中引用其他列名称跨

问题描述

希望这是一个简单的问题。我想使用dplyr mutate,并引用另一个静态列以用于所有mutate函数。

df <- data.frame(baseline = c(1,2,3),day1 = c(NA,2),day2 = c(2,3,4),day3= c(5,4,6))

我想为每天从基准开始的更改创建一个新列“ fc”。我想我可能需要结合使用'sym'和!!使其达到基准,但尚未弄清楚。

df %>% mutate(fc = mutate(across(starts_with('day')),./baseline))

给出错误

警告信息: 在format.data.frame(如果(省略)x [seq_len(n0),,drop = FALSE]否则x,: 数据框损坏:列将被截断或用NA填充

更新:我每天的列中都有一些缺失的值,因此已经编辑了上面的代码。当输入中存在NA时,如何将给出的NA合并到输出中,而不是失败?

解决方法

尝试一下:

library(dplyr)
#Code
df2 <- df %>% mutate(across(day1:day3,.fns = list(fc = ~ ./baseline)))

输出:

  baseline day1 day2 day3   day1_fc  day2_fc day3_fc
1        1    2    2    5 2.0000000 2.000000       5
2        2    2    3    4 1.0000000 1.500000       2
3        3    2    4    6 0.6666667 1.333333       2

或保留相同的变量:

#Code 2
df <- df %>% mutate(across(day1:day3,~ ./baseline))

输出:

  baseline      day1     day2 day3
1        1 2.0000000 2.000000    5
2        2 1.0000000 1.500000    2
3        3 0.6666667 1.333333    2

添加了新数据后,您将获得以下信息:

#Code 3
df2 <- df %>% mutate(across(day1:day3,.fns = list(fc = ~ ./baseline)))

输出:

  baseline day1 day2 day3   day1_fc  day2_fc day3_fc
1        1   NA    2    5        NA 2.000000       5
2        2    2    3    4 1.0000000 1.500000       2
3        3    2    4    6 0.6666667 1.333333       2

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...