我有一个类似的数据框:
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
有谁知道如何做到这一点?
答案 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