所以我有一个数据框,其中我有三列和这样的数据(我有更多的组):
group x y
group_1 5 1
group_1 6 2
group_1 7 3
group_2 8 4
group_2 9 5
group_2 10 6
group_2 11 7
我现在希望明确地做一些事情,所以我可以使用不同的命令仅定位group_2
x
- 值等等。
但是,我尝试做一些循环内容,并希望在输出中说我现在正在使用group_1
或group_2
。但我有点迷失在如何做到这一点。
所以例如我有这个简单的代码(我知道我可以立即定位列,但现在这只是更容易):
data_group_1 <- subset(data, group =="group_1")
data_group_2 <- subset(data, group =="group_2")
data_grouped <- list(data_group_1$x, data_group_2$x)
for (data_group in data_grouped) {
print(mean(data_group))
}
现在,如上所述,我希望在打印x
- 值的平均值之前打印该组的名称,因此我知道哪个意思属于什么(我原则上可以有100个组) )。但我不确定如何只定位一次组名,并将其用作名称/字符串。那么有任何提示或帮助吗?
此致
答案 0 :(得分:3)
使用子集是非常糟糕的。原因是它不能扩展到许多群体 - 大量的复制 - 如果你事先不知道有多少群体,那就非常棘手。
使用页面dplyr
会更容易,它允许您对数据框进行分组,然后执行分组操作:
library(dplyr)
data_example <- data.frame(
group = c(rep("group_1", 3), rep("group_2", 4)),
x = 5:11,
y = 1:7
)
data_example %>%
group_by(group) %>%
summarise(max_x = max(x))
#> # A tibble: 2 x 2
#> group max_x
#> <fctr> <dbl>
#> 1 group_1 7
#> 2 group_2 11
这消除了循环的需要,并且需要显示您当前正在处理的组。
答案 1 :(得分:0)
假设您的数据已加载到数据框d中。然后,
聚合(d [,2:3],列表(d $ group),平均值)
应该为您提供所需的输出。
答案 2 :(得分:0)
另一种简单方法
data_group_1 <- subset(data$x, group =="group_1")
data_group_2 <- subset(data$x, group =="group_2")
data_grouped <- data.frame()
data_grouped <- cbind.data.frame(data_group_1, data_group_2)
for (i in 1:ncol(data_grouped) ) {
print(names(data_grouped)[i])
print(mean(data_grouped[,i]))
}