[英]How can I get the average for a column from multiple files in R?
我对 R 很陌生,这可能不是一个很难解决的问题,但我一直在四处走动,无法得到我需要的东西,所以如果有人能给我一些建议,我将不胜感激。 我以前也从未在其中一个论坛上问过问题,所以如果我没有遵循所有正常的发帖约定,我深表歉意。
我有来自另一个程序的多个 output 文件,我正在尝试使用 R 进行一些分析。 output文件的数量不会提前知道。 我将它们读入我的 R 代码并将它们存储在变量 listFinal.data 中。
我正在尝试遍历 output 文件并按 Entity.Type 列中的不同值分组,计算每种不同实体类型的出现次数,然后我需要获取每个实体类型的平均出现次数所有 output 文件。
这是我需要在 output 文件中使用的列的片段:
ID | 实体类型 |
---|---|
1 | 地面 |
2 | 地面 |
3 | 空气 |
4 | 空气 |
5 | 海 |
6 | 地面 |
7 | 海 |
8 | 地面 |
9 | 空气 |
10 | 地面 |
我正在寻找这个单个文件的结果将是:
地面 | 空气 | 海 |
---|---|---|
5 | 3 | 2 |
我可以只为一个文件成功执行此操作,但是当我使用我编写的代码并且我有多个文件时,当我真正想要的是上面的单个结果时,我会为每个文件得到类似上面的结果,这是平均值跨所有文件。
这是我正在使用的代码:
for (h in 1:length(listFinal.data)) #listFinal.data is all the output files from another program
listVeh.data[[h]] <- listFinal.data[[h]] %>%
filter(Entity.Type != "Lifeform") %>% #remove people, just count vehicles
group_by(Entity.Type) %>%
summarize(n = n())
这是一个玩具示例,您已将 output 数据写入列表:
set.seed(4)
d1 <- data.frame(ID = 1:30,
Entity.Type = sample(c("Ground", "Air", "Sea"), 30, replace=TRUE))
d2 <- data.frame(ID = 1:30,
Entity.Type = sample(c("Ground", "Air", "Sea"), 30, replace=TRUE))
datlist <- list(d1, d2)
names(datlist) <- c("d1", "d2")
我更喜欢ldply
而不是do.call(rbind, lapply(...))
因为它直接为命名列表添加数据的 id。
output <- plyr::ldply(datlist, function(x) x %>% group_by(Entity.Type) %>% summarise(n=n()))
.id Entity.Type n
1 d1 Air 9
2 d1 Ground 9
3 d1 Sea 12
4 d2 Air 14
5 d2 Ground 9
6 d2 Sea 7
计算整个列表中的平均值将很简单。
output %>% group_by(Entity.Type) %>% summarise(mean(n))
# A tibble: 3 x 2
Entity.Type `mean(n)`
<chr> <dbl>
1 Air 11.5
2 Ground 9
3 Sea 9.5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.