如何解决如何在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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。