如何通过变量名称获取列的平均值?

时间:2016-06-06 09:37:31

标签: r dataframe mean

我有一个类似的数据框:

Col_name  Col_X    Col_Y    Col_Z
BoB         2        3          3    
BoB         3        4          3
Carl        4        5          2
Carl        2        3          3
Eva         5        2          5
Bob         1        1          2

我希望通过名称获取每列的平均值。所以我想得到这个df:

Col_name   Col_X    Col_Y      Col_Z
 BOB       2        2.33       2,33
 Carl      3        4          2,5
 Eva       5        2          5

有谁知道如何做到这一点?

4 个答案:

答案 0 :(得分:1)

以下是dplyr的一种方法(顺便说一下 - 由于你有不同的名称,我不知道你是如何获得输出的,但是我将它们转换为所有小写以获得所需的输出):< / p>

library(dplyr)
df %>%
  mutate(Col_name = tolower(Col_name)) %>%
  group_by(Col_name) %>%
  summarise_each(funs(mean))

输出如下:

Source: local data frame [3 x 4]

  Col_name Col_X    Col_Y    Col_Z
     <chr> <dbl>    <dbl>    <dbl>
1      bob     2 2.666667 2.666667
2     carl     3 4.000000 2.500000
3      eva     5 2.000000 5.000000

答案 1 :(得分:0)

使用包dplyr并执行以下操作:

library(dplyr)
df <- data.frame(Col_name = c("Bob", "Bob", "Carl", "Carl"), 
                 Col_X = c(2,3,4,2), Col_Y = c(3,4,5,3))
df %>% group_by(Col_name) %>% summarise_each(funs(mean(.)))

您正在将数据(df)按照Col_name列对其进行分组,然后对每列和所有不同的组应用函数mean

输出:

Source: local data frame [2 x 3]

  Col_name Col_X Col_Y
    (fctr) (dbl) (dbl)
1      Bob   2.5   3.5
2     Carl   3.0   4.0

答案 2 :(得分:0)

使用dplyr:

require(dplyr)

a <- data.frame(Col_name = c(rep("Bob", 2), rep("Carl", 2), "Eva", "Bob"),
                Col_X = runif(6),
                Col_Y = runif(6),
                Col_Z = runif(6))

 a %>% 
  group_by(Col_name) %>% 
  summarise_each(funs(mean))

答案 3 :(得分:0)

使用包data.table,您可以

# creating example data
library(data.table)
dt <- data.table(Col_name = c("Bob", "Bob", "Carl", "Carl"), Col_X = c(2,3,4,2), Col_Y = c(3,4,5,3))

# aggregate
dt[, lapply(.SD, mean), by = Col_name]

返回:

   Col_name Col_X Col_Y
1:      Bob   2.5   3.5
2:     Carl   3.0   4.0