在R中使用方法合并重复id的行

3
我将把下列数据框进行合并,其中重复的id将通过重复观察值的平均数相互结合在一起。
id     V1      V2
AA  21.76410    1       
BB  25.57568    0       
BB  20.91222    0       
CC  21.71828    1       
CC  22.89878    1       
FF  22.20535    0   

structure(list(id = structure(c(1L, 2L, 2L, 3L, 3L, 4L), .Label = c("AA", 
"BB", "CC", "FF"), class = "factor"), V1 = c(21.7640981693372, 
25.575675904744, 20.9122208946358, 21.7182828011676, 22.8987775530191, 
22.2053520672232), V2 = c(1, 0, 0, 1, 1, 0)), class = "data.frame", row.names = c(NA, 
-6L))

通过平均值数据降维后,应该像这样 -
id     V1       V2
AA  21.76410    1       
BB  23.24395    0   # mean reduction for BB in V1 and V2    
CC  22.30853    1   # same as above 
FF  22.20535    0   

structure(list(id = structure(1:4, .Label = c("AA", "BB", "CC", 
"FF"), class = "factor"), V1 = c(21.7641, 23.24395, 22.30853, 
22.20535), V2 = c(1, 0, 1, 0)), class = "data.frame", row.names = c(NA, 
-4L))


我该如何在R中实现这个功能? 如果你能与我分享任何包函数或自定义函数代码,那将非常有帮助。 谢谢。

尝试使用aggregate(.~ id, df1, mean) - akrun
3个回答

4
使用base R,可以通过aggregate完成此操作。
aggregate(.~ id, df1, mean)

2

使用 dplyr

df %>%
  group_by(id) %>%
  mutate(V1 = ifelse(n() > 1, mean(V1), V1)) %>%
  unique()

# A tibble: 4 x 3
# Groups:   id [4]
#   id       V1    V2
#<fct> <dbl> <dbl>
#1 AA     21.8     1
#2 BB     23.2     0
#3 CC     22.3     1
#4 FF     22.2     0

1
或者只需使用 df %>% group_by(id) %>% summarise_all(mean) - ulfelder
@ulfelder 不错。我之前不太熟悉 summarise_all 这个函数。谢谢! - sm925
@hulk 我很高兴能够帮助到你! - sm925

2

使用基本R中的aggregate的另一种方式

dfout <- aggregate(df[-1],df[1],FUN = mean)

如此,以致于。
> dfout
  id       V1 V2
1 AA 21.76410  1
2 BB 23.24395  0
3 CC 22.30853  1
4 FF 22.20535  0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接