2017-09-21 59 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])) 

}