使用mutate进行编程以创建新的数据列

时间:2018-12-14 02:18:06

标签: r dplyr rlang

像这样的data.frame

df <- data.frame("Config" = c("C1","C1","C2","C2"), "SN1" = 1:4, "SN2" = 5:8)

我正在尝试使df %<>% mutate更通用。这是一个示例:

df %<>%
  mutate(
    Tag=paste(
      Config,
      as.character(SN1),
      as.character(SN2),
      sep="_"
    )
  )

所希望的是将向量c("Config", "SN1", "SN2")传递到上面的mutate或执行相同工作的替代方法,即将新列Tag插入上面的data.frame 。谢谢您的帮助

1 个答案:

答案 0 :(得分:1)

就像我在评论中提到的那样,这不是关于运算符%<>%的问题,而是关于在dplyr函数中使用非标准评估(NSE)的问题。上面有一个pretty good vignette,但是要掌握NSE /整洁的评估仍然很棘手。

也正如我提到的,您作为示例所做的正是tidyr::unite所做的,因此,如果您只需要这些,则实际上不需要编写任何内容。但这是一个很好的简单示例。

在此功能custom_unite中,第一个参数是.data,该数据帧正在操作(要传递的习惯是将第一个参数作为数据帧)。然后...捕获了要粘贴的灵活数量的裸列名称,new_col是要创建的列的裸列名称,sep照原样传递给{{ 1}}。 (我无意间将参数的顺序从paste切换到tidyr::unite而不是col, ...。)

您需要创建列的数量。对于单个裸列..., new_col,可以使用new_col,但是对于灵活的列数,可以在enquo上使用quos,然后将其与{{ 1}}。

要创建新列,您将使用...而不是!!!来分配未引用的报价。

:=

reprex package(v0.2.1)于2018-12-14创建