【发布时间】:2020-11-27 02:58:42
【问题描述】:
我下载了一个 1 列和 1000 行的数据框。数据框的组织方式是区域的名称,下面是区域对应的分数。
我想计算每个区域对应的值的平均值。
所以,例如:
区域 1:1、2、3、4 的平均值
区域 2:1,2 的平均值
等等
我不确定如何编写脚本来执行此操作并在哪里获得输出 我有一个有 2 列的表(区域,平均值)
【问题讨论】:
我下载了一个 1 列和 1000 行的数据框。数据框的组织方式是区域的名称,下面是区域对应的分数。
我想计算每个区域对应的值的平均值。
所以,例如:
区域 1:1、2、3、4 的平均值
区域 2:1,2 的平均值
等等
我不确定如何编写脚本来执行此操作并在哪里获得输出 我有一个有 2 列的表(区域,平均值)
【问题讨论】:
以下代码与标记组开始的字符串无关,它只取决于它们不能被强制转换为数字。
首先,一个测试数据集。
df1 <- data.frame(x = c("A", 1:4, "B", 1:2, "C", 1:3))
现在组的意思。
y <- suppressWarnings(as.numeric(df1[[1]]))
i <- is.na(y)
j <- cumsum(i)
tapply(y[!i], j[!i], mean)
# 1 2 3
#2.5 1.5 2.0
【讨论】:
这是一个基本的 R 选项
do.call(
rbind,
Map(
function(v) data.frame(Region = v[1, ], Mean = mean(as.numeric(v[-1, ]))),
split(df, cumsum(grepl("Region\\s\\d+", df$x)))
)
)
给了
Region Mean
1 Region 1 2.5
2 Region 2 1.5
3 Region 3 2.0
数据
df <- structure(list(x = c("Region 1", "1", "2", "3", "4", "Region 2",
"1", "2", "Region 3", "1", "2", "3")), class = "data.frame", row.names = c(NA,
-12L))
【讨论】: