R dplyr 在列索引上发生变异

Posted

技术标签:

【中文标题】R dplyr 在列索引上发生变异【英文标题】:R dplyr mutate on column index 【发布时间】:2017-08-25 13:25:35 【问题描述】:

基于这个问题:dplyr: how to reference columns by column index rather than column name using mutate?

我想对变异的源和目标使用列索引来变异:

iris %>% head %>% mutate(.[[1]] = .[[1]] + .[[2]])

给予:

Error: unexpected '=' in "iris %>% head %>% mutate(.[[1]] =".

但是,以下工作:

iris %>% head %>% mutate(sum = .[[1]] + .[[2]])

【问题讨论】:

为什么要以不受支持的方式来做这件事。已经有标准的方法来使用列名来调用列。如果有以数字开头的列,请将其更改为标准名称,因为在其他情况下这样做会变得困难 我正在制作一个通用函数来处理具有不同列名但数据格式相同的多个表。我可以暂时重命名使变异的列并将它们恢复为旧名称,但这将是一个更简洁的解决方案。如果不支持,那么这就是我正在寻找的答案 这种情况下最好用base Riris[[1]] <- iris[[1]] + iris[[2]] 谢谢,这解决了,我总是很困惑为什么这些问题会被否决,但在 R 中通常有其他解决问题的方法。这是一个愚蠢的问题吗?我应该删除它吗? sum two columns in R的可能重复 【参考方案1】:

我们可以在base R这样做

iris[[1]] <- iris[[1]] + iris[[2]]

【讨论】:

这可以用来选择,例如倒数第二列吗? iris %&gt;% head %&gt;% mutate(sum = .[[1]] + .[[-2]]) 不起作用 @PhillipBlack 你是说iris %&gt;% head %&gt;% mutate(sum = rowSums(.[2:(ncol(.)-1)])) 没错!对于旁观者: .[[(ncol(.)-1)]] 和 [(ncol(.)-1)] 将调用列的向量或列本身。 @Luis 您可以使用aeps_1_fine %&gt;% mutate(!! names(.)[1] := as.numeric(!! rlang::sym(names(.)[1]))) 或跨使用aeps_1_fine %&gt;% mutate(across(1, as.numeric)) 我不知道你怎么对 R 和 R 编程了解这么多!!非常感谢!成功了!

以上是关于R dplyr 在列索引上发生变异的主要内容,如果未能解决你的问题,请参考以下文章

R中dplyr包中变异函数的奇怪行为

基于存储为R w / dplyr mutate()中的向量的列索引连接data.frame字符列?

带有 dplyr 的用户定义函数 - 变异列是一个参数

R:在分组列中变异非零最小值

合并或变异摘要 (dplyr)

R - 如何使用准引号动态构造变异函数名称