"Grouping by" 多个文件中的相同列并在每个文件中创建新列
"Grouping by" the same columns over multiple files and create new columns in each file
我有大约 20-30 个 dbf 文件,我在 R 中导入了这些文件。
我无法将它们合并为一个数据 frame/table,因为那样总文件大小约为 2 GB。
我想在每个文件中创建新列 "avg_spends" 按年龄分组并在每个文件中创建多个列。
当我将文件合并为一个数据时table,然后使用dplyr 执行以下命令。
file_combo <- dbf_file %>% group_by(ctg, age) %>% mutate(avg_spends =
mean(total_spend)
这只是第一步。同样,我必须根据之前的列 available/created 创建新列。
我如何通过按第一个列拆分文件来完成这项工作 - 文件 1、文件、2 等
我还需要为每个文件分别输出
这是我拥有的数据示例
files || age || ctg || total_spend
==================================
file1 || 45 || 1 || 1026
file1 || 26 || 2 || 1574
file1 || 45 || 1 || 64
file1 || 32 || 1 || 1610
file2 || 41 || 1 || 884
file2 || 22 || 1 || 530
file2 || 41 || 2 || 451
file2 || 22 || 1 || 520
file3 || 21 || 2 || 727
file3 || 34 || 1 || 562
file3 || 43 || 2 || 452
file3 || 23 || 1 || 851
您可以通过将所有文件存储在一个列表中并使用 lapply()
对整个列表执行操作来实现此目的,如下所示:
file1 <- data.frame(age = c(45,26,45,32), ctg = c(1,2,1,1), total_spend = c(1026, 1574, 64, 1610))
file2 <- data.frame(age = c(41,22,41,22), ctg = c(1,1,2,1), total_spend = c(884, 530, 451, 520))
file3 <- data.frame(age = c(21,34,43,23), ctg = c(2,1,2,1), total_spend = c(727, 562, 452, 851))
files <- list(file1, file2, file3)
result <- lapply(files, function(x) x %>% group_by(ctg, age) %>% mutate(avg_spends = mean(total_spend)))
我有大约 20-30 个 dbf 文件,我在 R 中导入了这些文件。 我无法将它们合并为一个数据 frame/table,因为那样总文件大小约为 2 GB。 我想在每个文件中创建新列 "avg_spends" 按年龄分组并在每个文件中创建多个列。
当我将文件合并为一个数据时table,然后使用dplyr 执行以下命令。
file_combo <- dbf_file %>% group_by(ctg, age) %>% mutate(avg_spends =
mean(total_spend)
这只是第一步。同样,我必须根据之前的列 available/created 创建新列。 我如何通过按第一个列拆分文件来完成这项工作 - 文件 1、文件、2 等
我还需要为每个文件分别输出
这是我拥有的数据示例
files || age || ctg || total_spend
==================================
file1 || 45 || 1 || 1026
file1 || 26 || 2 || 1574
file1 || 45 || 1 || 64
file1 || 32 || 1 || 1610
file2 || 41 || 1 || 884
file2 || 22 || 1 || 530
file2 || 41 || 2 || 451
file2 || 22 || 1 || 520
file3 || 21 || 2 || 727
file3 || 34 || 1 || 562
file3 || 43 || 2 || 452
file3 || 23 || 1 || 851
您可以通过将所有文件存储在一个列表中并使用 lapply()
对整个列表执行操作来实现此目的,如下所示:
file1 <- data.frame(age = c(45,26,45,32), ctg = c(1,2,1,1), total_spend = c(1026, 1574, 64, 1610))
file2 <- data.frame(age = c(41,22,41,22), ctg = c(1,1,2,1), total_spend = c(884, 530, 451, 520))
file3 <- data.frame(age = c(21,34,43,23), ctg = c(2,1,2,1), total_spend = c(727, 562, 452, 851))
files <- list(file1, file2, file3)
result <- lapply(files, function(x) x %>% group_by(ctg, age) %>% mutate(avg_spends = mean(total_spend)))