R - 平均具有相同名称的行

时间:2015-03-04 23:34:35

标签: r average

R很新。

我有一个简单的数据集,有两列:名称和长度。我的数据显示了一些有两次出现的名字。我如何平均这些长度,然后只列出1个名称与平均长度而不是2?谢谢。

5 个答案:

答案 0 :(得分:10)

以下是几种方法:

- 与基地R:

aggregate(length~name,d,mean)
#   name length
# 1    a    5.0
# 2    b    8.5
# 3    c    7.0

- 使用dplyr套餐(绝对值得花时间探索)

library(dplyr)
d %>% 
  group_by(name) %>% 
  summarize(avg=mean(length))
# Source: local data frame [3 x 2]
# 
# name avg
# 1    a 5.0
# 2    b 8.5
# 3    c 7.0

可以通过以下命令生成样本可重现的数据集:

set.seed(1)
d <- data.frame(name=sample(letters[1:3],size=5,replace=TRUE),length=sample(10,size=5,replace=TRUE))

#   name length
# 1    a      9
# 2    b     10
# 3    b      7
# 4    c      7
# 5    a      1

答案 1 :(得分:2)

如何使用线性拟合的原始解决方案!只有一行:

    lm(length ~ name - 1, df)$coef
### namea nameb namec 
###   5.0   8.5   7.0 

答案 2 :(得分:1)

或使用data.table(@Marat Talipov发布的数据)

library(data.table)
setDT(d)[, list(length=mean(length)), name][]

答案 3 :(得分:0)

绝对不是R方式或最佳方式,但你可以做到

library(sqldf)
df <- howeveryougetyourdata.csv
sqldf('SELECT AVG(length) average_length FROM df WHERE name IN ("this","that"))

答案 4 :(得分:0)

如果我理解正确,您需要计算每个名字的平均长度。我会像这样解决它。

library(plyr)
df.new <- ddply(df, .(name), summarise, length=mean(length))

鉴于您是R的新手,我建议您花些时间学习一些Hadley Wickham的软件包plyr(或dplyr),reshape2ggplot2 。它们专门设计用于使大量这些数据操作比基础R更直观。