【发布时间】:2021-06-28 08:09:58
【问题描述】:
我正在使用 dplyr mutate 来计算 2 列之间的排名差异。我正在尝试使用后缀来选择列名,而不是每次都更改它。
suffix1 = ".day"
suffix2 = ".nit"
mergeddf <- left_join(df1, df2, by="col1", suffix = c(suffix1,suffix2)) %>%
select(-paste0("Description",suffix2)) %>%
mutate(RankDiff = as.numeric(as.character(paste0("Rank",suffix1))) - as.numeric(as.character(paste0("Rank",suffix2)))) %>%
arrange(RankDiff)
suffix1 和 suffix2 已完美添加,并在 select 中获取。但在变异中,我收到以下错误:
1:
mutate()列RankDiff有问题。 ℹRankDiff = -...。 ℹ 强制 2 引入的 NA:mutate()列的问题RankDiff。 ℹRankDiff = -...。 ℹ 强制引入的 NAs
虽然我可以看到,但 RankDiff 的列是由所有 NAs 组成的
然后我将代码更改为:
mutate(RankDiff = paste0("Rank",suffix1) - paste0("Rank",suffix2))
这会产生以下错误:
错误:
mutate()列RankDiff有问题。 ℹRankDiff = paste0("Rank", suffix1) - paste0("Rank", suffix2)。 x 非数字 二元运算符的参数
通过替换来获取列的正确方法是什么?
谢谢。
【问题讨论】:
-
In
mutatepaste0("Rank",suffix1)不被视为列名,而只是作为字符串。要访问该列,请将字符串包装在其中,例如.data代词,即.data[paste0("Rank",suffix1)]。有关更多信息,请参阅?`tidyeval-data` -
x
[不受 .data 代词支持,请改用[[或 $。因此,我做了.data[[paste0("Rank",suffix1)]] -
对不起。当我只是通过评论添加而不是在控制台中自己做时,我有时会忘记这一点。 (;