函数表达式不能用作 R 中的列名

functional expression not work as column name in R

我尝试使用指定的列名向数据框中添加一个新列。

这个有效:

dat = data.frame(x1 = 1:10,
                 x2 = 101:110,
                 x3 = 1:2,
                 x4 = 2:1)

cbind(dat, 'x10' = 1:10)

结果:

   x1  x2 x3 x4 x10
1   1 101  1  2   1
2   2 102  2  1   2
3   3 103  1  2   3
4   4 104  2  1   4
5   5 105  1  2   5
6   6 106  2  1   6
7   7 107  1  2   7
8   8 108  2  1   8
9   9 109  1  2   9
10 10 110  2  1  10

但使用函数表达式作为列名不起作用

cbind(dat, paste0('x10', '_flag') = 1:10)

Error: unexpected '=' in "cbind(dat, paste0('x10', '_flag') ="

我在想

column_name = paste0('x10', '_flag')
cbind(dat, column_name = 1:10)

但它会将 "column_name" 作为列名,而不是它引用的字符串(感谢 @42- 纠正我)

如何让R知道paste0()只是一个字符串?我试过 as.character(paste0()) 但没有成功。任何帮助表示赞赏。谢谢!

而不是使用 cbind,您应该学习使用 "[",因为它确实在 j 参数位置(第一个逗号之后)接受计算的列名称:

> dat[ , paste0('x10', '_flag') ] = 1:10
> dat
   x1  x2 x3 x4 x10_flag
1   1 101  1  2        1
2   2 102  2  1        2
3   3 103  1  2        3
4   4 104  2  1        4
5   5 105  1  2        5
6   6 106  2  1        6
7   7 107  1  2        7
8   8 108  2  1        8
9   9 109  1  2        9
10 10 110  2  1       10

这相当于与“[[”

的类似策略
dat[[ paste0('x10', '_flag') ]] = 1:10

注意:这避免了不幸的新手尝试使用 $

来获取分配的计算列名称