R 使用mutate_u将新列添加到数据帧,其中列名由变量指定

R 使用mutate_u将新列添加到数据帧,其中列名由变量指定,r,dataframe,dplyr,R,Dataframe,Dplyr,我有一个数据框,我想在其中添加一列,其中该列由变量名定义: df <- diamonds NewName <- "SomeName" df <- df %>% mutate_(paste0(NewName," = \"\"")) 我见过很多使用mutate_uu来更改列名的例子,但不用于动态创建列。有什么帮助吗?问题与语句的评估时间有关。据我所知,mutate\uuu的目标不是重新创建mutate的语法,例如使用paste创建mutate(SomeName=”“)。相反

我有一个数据框,我想在其中添加一列,其中该列由变量名定义:

df <- diamonds
NewName <- "SomeName"
df <- df %>% mutate_(paste0(NewName," = \"\""))

我见过很多使用mutate_uu来更改列名的例子,但不用于动态创建列。有什么帮助吗?

问题与语句的评估时间有关。据我所知,
mutate\uuu
的目标不是重新创建
mutate
的语法,例如使用
paste
创建
mutate(SomeName=”“)
。相反,它允许函数的生成通过。您的方法失败的原因是(我相信)它正在寻找一个名为
的函数

相反,您需要传入一个可以计算的函数(这里,我使用
paste
作为占位符),并使用变量设置该列的名称。这应该起作用:

df <- diamonds
NewName <- "SomeName"
df <- df %>% mutate_(.dots = setNames("paste('')",NewName))
给出:

   carat       cut color clarity depth table price     x     y     z    SomeName
   <dbl>     <ord> <ord>   <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>       <chr>
1   0.23     Ideal     E     SI2  61.5    55   326  3.95  3.98  2.43     Ideal E
2   0.21   Premium     E     SI1  59.8    61   326  3.89  3.84  2.31   Premium E
3   0.23      Good     E     VS1  56.9    65   327  4.05  4.07  2.31      Good E
4   0.29   Premium     I     VS2  62.4    58   334  4.20  4.23  2.63   Premium I
5   0.31      Good     J     SI2  63.3    58   335  4.34  4.35  2.75      Good J
6   0.24 Very Good     J    VVS2  62.8    57   336  3.94  3.96  2.48 Very Good J
7   0.24 Very Good     I    VVS1  62.3    57   336  3.95  3.98  2.47 Very Good I
8   0.26 Very Good     H     SI1  61.9    55   337  4.07  4.11  2.53 Very Good H
9   0.22      Fair     E     VS2  65.1    61   337  3.87  3.78  2.49      Fair E
10  0.23 Very Good     H     VS1  59.4    61   338  4.00  4.05  2.39 Very Good H
克拉切割颜色清晰度深度表价格x y z SomeName
1 0.23理想E SI2 61.5 55 326 3.95 3.98 2.43理想E
2 0.21保费E SI1 59.8 61 326 3.89 3.84 2.31保费E
3 0.23良好E VS1 56.9 65 327 4.05 4.07 2.31良好E
4 0.29保费I VS2 62.4 58 334 4.20 4.23 2.63保费I
5 0.31良好J SI2 63.3 58 335 4.34 4.35 2.75良好J
6 0.24非常好J VVS2 62.8 57 336 3.94 3.96 2.48非常好J
7 0.24非常好I VVS1 62.3 57 336 3.95 3.98 2.47非常好I
8 0.26非常好H SI1 61.9 55 337 4.07 4.11 2.53非常好H
9 0.22中等偏东VS2 65.1 61 337 3.87 3.78 2.49中等偏东
10 0.23非常好H VS1 59.4 61 338 4.00 4.05 2.39非常好H

(值得注意的是,我还获得了第一次使用的初始语法,随后出现了失败。值得深入研究。)

我没有得到错误,只有一个名为
SomeName=“
的列选择所有行并再次运行,这似乎是tempramentalIndeed,第二次不起作用。必须使用
dplyr
吗?关于
df[[NewName]]的工作原理是什么,我们试图在dplyr中解决这个问题,但有点困惑为什么它有时工作,而不是另一个。以下方法也有效(dplyr中必须有一种更简洁的方法):df%mutate(NewName=NA)df%rename(dots=setNames(“NewName”,list(NewName)))
df <- df %>% mutate_(.dots = setNames("paste(cut, color)",NewName))
   carat       cut color clarity depth table price     x     y     z    SomeName
   <dbl>     <ord> <ord>   <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>       <chr>
1   0.23     Ideal     E     SI2  61.5    55   326  3.95  3.98  2.43     Ideal E
2   0.21   Premium     E     SI1  59.8    61   326  3.89  3.84  2.31   Premium E
3   0.23      Good     E     VS1  56.9    65   327  4.05  4.07  2.31      Good E
4   0.29   Premium     I     VS2  62.4    58   334  4.20  4.23  2.63   Premium I
5   0.31      Good     J     SI2  63.3    58   335  4.34  4.35  2.75      Good J
6   0.24 Very Good     J    VVS2  62.8    57   336  3.94  3.96  2.48 Very Good J
7   0.24 Very Good     I    VVS1  62.3    57   336  3.95  3.98  2.47 Very Good I
8   0.26 Very Good     H     SI1  61.9    55   337  4.07  4.11  2.53 Very Good H
9   0.22      Fair     E     VS2  65.1    61   337  3.87  3.78  2.49      Fair E
10  0.23 Very Good     H     VS1  59.4    61   338  4.00  4.05  2.39 Very Good H