gpt4 book ai didi

r - 如何将 dplyr 操作与列名的字符串列表一起使用

转载 作者:行者123 更新时间:2023-12-05 00:45:13 25 4
gpt4 key购买 nike

是否有一种可靠的方法来使用包含与数据框列名称相对应的字符串列表的变量来传递给各种 dplyr 操作?

我刚刚进入 dplyr

当我尝试对数据框中的列子集使用操作时,dplyr 在我明确命名列并在逗号分隔列表中逐一命名时效果很好。

此代码按预期工作

library(dplyr)

# Create dataframe
df <- data.frame(
a = c(1, 1, 1, 2, 2, 2)
, b = c(1, 2, 3, 1, 2, 3)
, c = c(1, 2, 1, 2, 1, 2)
)

# Identify rows where a * c is duplicated
df %>%
select(a, c) %>%
count(a, c) %>%
filter(n > 1)

但是,有时我已经有了一个列名列表,我想将这些列名传递给 dplyr 步骤,而不是明确命名每一列。但是,我还没有找到一种简单/方便的方法来做到这一点,它足够强大,可以处理多个 dplyr 操作:

此代码无效

# Attempting to do the same with a named list of relevant columns
relevantCols <- c("a", "c")

# Fails
df %>%
select(relevantCols)

# Trying to make new variable based on my relevantCols variable
colsForDplyr <- sapply(relevantCols, eval)

df %>%
# First step succeeds
select(colsForDplyr) %>%
# Fails at count step
count(colsForDplyr)

在上面的简单示例中,在每个 dplyr 操作中重新键入 'a, c' 没什么大不了的。但是,如果我有一个更长的列列表,我宁愿将一个变量传递给 dplyr 操作,而不是一遍又一遍地重新键入列名列表。

关于如何实现这一点的任何提示?

我将接受一个解决方案,该解决方案显示如何从可用于各种 dplyr 操作的列名列表创建变量,而不是一遍又一遍地重新键入每个列名

最佳答案

我们可以使用 syms!!! 将列名作为变量传递。

library(dplyr)
library(rlang)

relevantCols <- c("a", "c")

df %>%
count(!!!syms(relevantCols)) %>%
filter(n > 1)

# a c n
#1 1 1 2
#2 2 2 2

关于r - 如何将 dplyr 操作与列名的字符串列表一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64632348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com