使用mutate_在数据框中添加新列,其中变量指定了列名。

5
我有一个数据框,我想添加一列,这列由变量名定义:
df <- diamonds
NewName <- "SomeName"
df <- df %>% mutate_(paste0(NewName," = \"\""))

这给我带来了以下错误:
Error: attempt to use zero-length variable name

我看到很多使用mutate_更改列名的示例,但没有动态创建列的示例。有帮助吗?

我没有收到任何错误信息,只是一个名为 SomeName = "" 的列。 - Haboryme
选择所有行并再次运行,这似乎有点难以捉摸。 - pluke
事实上,第二次它不起作用。 - Haboryme
1
必须使用 dplyr 吗?如果使用 df[[NewName]] <- calculation 呢?如果想要节省一些 df$,可以使用 with - mathematical.coffee
这个代码是有效的,我试着用dplyr解决这个问题,但有时候会有些困惑为什么有时候可以工作而有时候又不行。以下代码也是有效的(在dplyr中可能有更简洁的方法):df <- df %>% mutate(NewName = NA) df<- df%>% rename_(.dots=setNames("NewName", list(NewName))) - pluke
1个回答

3
这个问题与语句评估的时间有关。据我理解,mutate_ 的目标不是重新创建 mutate 的语法,例如使用 paste 创建 mutate(SomeName = "")。相反,它允许生成可传递的函数。你的方法失败的原因是(我认为)它正在寻找一个名为 "" 的函数。

相反,你需要传递一个可以被评估的函数(这里,我使用 paste 作为占位符),并使用你的变量设置该列的名称。这应该可以解决问题:

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

这也允许更多的控制,例如,您可以粘贴 cutcolor

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

(值得注意的是,我第一次尝试时也成功了初始语法,但随后失败了。这个问题值得深入探究。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接