gpt4 book ai didi

r - 将变量传递给 tidyr 的集合以重命名键/值列?

转载 作者:行者123 更新时间:2023-12-04 11:35:50 24 4
gpt4 key购买 nike

我想调用tidyr::gather()在自定义函数中,我将一对字符变量传递给该函数,这些变量将用于重命名 keyvalue列。例如

myFunc <- function(mydata, key.col, val.col) {
new.data <- tidyr::gather(data = mydata, key = key.col, value = val.col)
return(new.data)
}

但是,这不能按预期工作。
temp.data <- data.frame(day.1 = c(20, 22, 23), day.2 = c(32, 22, 45), day.3 = c(17, 9, 33))

# Call my custom function, renaming the key and value columns
# "day" and "temp", respectively
long.data <- myFunc(mydata = temp.data, key.col = "day", val.col = "temp")

# Columns have *not* been renamed as desired
head(long.data)
key.col val.col
1 day.1 20
2 day.1 22
3 day.1 23
4 day.2 32
5 day.2 22
6 day.2 45

期望的输出:
head(long.data)
day temp
1 day.1 20
2 day.1 22
3 day.1 23
4 day.2 32
5 day.2 22
6 day.2 45

我的理解是 gather()对大多数参数使用裸变量名(就像在本例中一样,使用 "key.col" 作为列名,而不是存储在 key.col 中的值)。我尝试了多种在 gather() 中传递值的方法。调用,但大多数返回错误。例如, gather() 的这三个变体调用 myFunc返回 Error: Invalid column specification (为了说明的目的,忽略 value 参数,它具有相同的行为):
gather(data = mydata, key = as.character(key.col) value = val.col)

gather(data = mydata, key = as.name(key.col) value = val.col)

gather(data = mydata, key = as.name(as.character(key.col)) value = val.col)

作为一种解决方法,我只是将调用后的列重命名为 gather() :
colnames(long.data)[colnames(long.data) == "key"] <- "day"

但是给定 gather()的所谓重命名键/值列的功能,我该如何在 gather() 中执行此操作在自定义函数中调用?

最佳答案

...并且有同样的问题,我现在在这里找到了答案:https://dplyr.tidyverse.org/articles/programming.html

您可以让 dplyr 通过用感叹号设置符号来评估符号。在您最初的问题中,代码将是:

gather(data = mydata, key = !!key.col value = !!val.col)

关于r - 将变量传递给 tidyr 的集合以重命名键/值列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37756014/

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