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

k3bvogb1  于 2023-04-03  发布在  其他
关注(0)|答案(1)|浏览(125)

我尝试使用指定的列名向数据框添加新列。
这是可行的:

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)

错误:cbind(dat,paste 0('x10','_flag')=”中出现意外的'='
我在想

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

但它将以“column_name”作为列名,而不是它引用的字符串(感谢@42-纠正我)
如何让R知道paste0()只是一个字符串?我试过as.character(paste0()),它不起作用。任何帮助的赞赏。谢谢!

pkmbmrz7

pkmbmrz71#

与其使用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

注意:这避免了新手使用$获得计算列名称的不幸尝试。

相关问题