如何在按列拆分数据后获取方法?用R统计

时间:2011-07-17 15:29:13

标签: r

感谢有用的答案:

Loop over vector (introspection in R?) or some other approach

我想从每个向量中得到均值,而不必单独为每个向量键入它。我该怎么做?

我的代码:

probability_ratings = split(offline$Probability,
  paste(offline$Item, offline$Cond, sep=""))
head(probability_ratings)

$i01c1
[1] 7 7 7 3 7 3 7 6

$i01c2
[1] 4 4 5 3 4 5 5 3

$i01c3
[1] 7 4 6 4 7 5 5 5

$i01c4
[1] 1 2 2 1 2 2 2 4

$i01c5
[1] 5 5 6 5 7 3 4

$i01c6
[1] 6 6 7 6 7 5 6

我需要每行的平均值,但我不确定这是什么数据类型以及是否/如何应用mean()函数。

谢谢, 卡特里娜

2 个答案:

答案 0 :(得分:7)

split会返回一个列表,因此您只需使用sapplylapplymean应用于每个列表元素。 lapply将返回一个列表,sapply将返回一个命名向量(在本例中)。

probability_ratings <- list(
  i01c1=c(7,7,7,3,7,3,7,6),
  i01c2=c(4,4,5,3,4,5,5,3),
  i01c3=c(7,4,6,4,7,5,5,5),
  i01c4=c(1,2,2,1,2,2,2,4),
  i01c5=c(5,5,6,5,7,3,4),
  i01c6=c(6,6,7,6,7,5,6) )
sapply(probability_ratings, mean)
#    i01c1    i01c2    i01c3    i01c4    i01c5    i01c6 
# 5.875000 4.125000 5.375000 2.000000 5.000000 6.142857 

答案 1 :(得分:3)

我会选择aggregate(),而不使用split。 使用链接中的示例:

tf <- data.frame(
  formant = sample(c("F1","F2"), 100, T),
  vowels = sample(c('a', 'e', 'i', 'o', 'u'), 100, T),
  IL = runif(100)
)
aggregate(IL ~ formant + vowels, data = tf, mean)

但是还有很多其他的可能性......