【发布时间】:2020-10-02 00:20:20
【问题描述】:
在 R 中,我定义了以下函数:
race_ethn_tab <- function(x) {
x %>%
group_by(RAC1P) %>%
tally(wt = PWGTP) %>%
print(n = 15) }
该函数只是为给定数据集生成加权计数,例如,race_ethn_tab(ca_pop_2000) 生成一个简单的 9 x 2 表:
1 Race 1 22322824
2 Race 2 2144044
3 Race 3 228817
4 Race 4 1827
5 Race 5 98823
6 Race 6 3722624
7 Race 7 116176
8 Race 8 3183821
9 Race 9 1268095
我必须对几个(大约 10 个不同的数据集)执行此操作,在这些数据集中,我更容易保持 dfs 的不同而不是 bind 它们并创建一个 year 变量。因此,我尝试使用for loop 或purrr::map() 来遍历我的dfs 列表。
这是我尝试过的:
dfs_test <- as.list(as_tibble(ca_pop_2000),
as_tibble(ca_pop_2001),
as_tibble(ca_pop_2002),
as_tibble(ca_pop_2003),
as_tibble(ca_pop_2004))
# Attempt 1: Using for loop
for (i in dfs_test) {
race_ethn_tab(i)
}
# Attempt 2: Using purrr::map
race_ethn_outs <- map(dfs_test, race_ethn_tab)
两次尝试都告诉我 group_by 不能应用于 factor 对象,但我无法弄清楚为什么 dfs_test 中的元素被注册为因素,因为我强迫它们进入tibble 类。将不胜感激任何基于我的方法的提示或在这里可能有意义的替代方法。
【问题讨论】:
-
ca_pop_2000、ca_pop_2001等到底是什么?您的函数引用了RAC1P,但我在其他任何地方都看不到。如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。 -
如果您使用
list而不是as.list,您的代码应该可以工作。查看as.list(as_tibble(mtcars), as_tibble(iris))与list(as_tibble(mtcars), as_tibble(iris))的输出 -
谢谢你,@RonakShah!成功了。