2017-09-21 58 views
0

所以我有,我有三列数据这样的数据帧(我有比这个更团体):在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_2x-值等等。

但是,我试图做一些循环的东西,并希望它在输出中说,我现在使用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个组)。但我不确定如何仅将目标名称定位一次,并将其用作名称/字符串。那么有什么提示或帮助做到这一点?

Regards

回答

3

对此使用子集相当糟糕。原因是它不能扩展到许多团队 - 大量的副本 - 如果你事先不知道有多少团队,这是非常棘手的。

它更容易使用的页面dplyr,它可以让你组的数据帧,然后做的GroupWise操作:

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 

这消除了需要循环,并且需要证明你组目前正在开展工作。

0

假设您的数据在数据框中加载d。然后,

骨料(d [2:3],列表(d $组),平均)

应该给你你正在寻找的输出。

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

}