在R中打印数据框的组名

时间:2017-09-21 12:15:15

标签: r

所以我有一个数据框,其中我有三列和这样的数据(我有更多的组):

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_1group_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个组) )。但我不确定如何只定位一次组名,并将其用作名称/字符串。那么有任何提示或帮助吗?

此致

3 个答案:

答案 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]))

}