如何引用 dplyr 中的其他列名 mutate across
How to refer to other column names within dplyr mutate across
希望是一个简单的问题。我想跨使用 dplyr mutate,并引用另一个静态列以用于所有 mutate 函数。
df <- data.frame(baseline = c(1,2,3), day1 = c(NA,2,2), day2 = c(2,3,4), day3= c(5,4,6))
我想创建一个新列 'fc' 来表示每天超过基线的变化。我想我可能需要 'sym' 和 !! 的组合围绕基线使其工作但尚未弄清楚。
df %>% mutate(fc = mutate(across(starts_with('day')), ./baseline))
报错
Warning message:
In format.data.frame(if (omit) x[seq_len(n0), , drop = FALSE] else x, :
corrupt data frame: columns will be truncated or padded with NAs
更新:我在每一天的列中都有一些缺失值,因此编辑了上面的代码。当输入中有 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
希望是一个简单的问题。我想跨使用 dplyr mutate,并引用另一个静态列以用于所有 mutate 函数。
df <- data.frame(baseline = c(1,2,3), day1 = c(NA,2,2), day2 = c(2,3,4), day3= c(5,4,6))
我想创建一个新列 'fc' 来表示每天超过基线的变化。我想我可能需要 'sym' 和 !! 的组合围绕基线使其工作但尚未弄清楚。
df %>% mutate(fc = mutate(across(starts_with('day')), ./baseline))
报错
Warning message: In format.data.frame(if (omit) x[seq_len(n0), , drop = FALSE] else x, : corrupt data frame: columns will be truncated or padded with NAs
更新:我在每一天的列中都有一些缺失值,因此编辑了上面的代码。当输入中有 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