需要帮助获取R数据框的摘要统计信息

时间:2016-05-06 12:50:49

标签: r dataframe statistics summary

这是我的数据(想象一下我有1050行数据)

ID_one  ID_two parameterX
111      aaa     23
222      bbb     54
444      ccc     39

然后我的代码将行分成100组(将有10组,每组100行)。

然后,我希望获得每组的摘要统计信息。 (不工作) 之后,我想将摘要统计信息放在数据框中以绘制它们。

例如,将参数X的所有10个均值放在一个数据帧中,将参数X的所有10个std dev放在同一个数据帧中等等 以下代码无效:

#assume data is available
dataframe_size <- nrow(thedata)
group_size <- 100
number_ofgroups <- round(dataframe_size / group_size)

#splitdata into groups of 100
split_dataframe_into_groups <- function(x,y)
    0:(x-1) %% y 
list1 <- split(thedata, split_dataframe_into_groups(nrow(thedata), group_size))

 #print data in the first group
 list1[[1]]$parameterX

 #NOT WORKING!!!  #get summary stat for all 10 groups
 # how to loop through all 10 groups?
 list1_stat <- do.call(data.frame, list(mean = apply(list1[[1]]$parameterX, 2, mean),
     sd = apply(list1[[1]]$parameterX, 2, sd). . .))

错误信息总是:

应用中的错误(...)dim(x)必须具有正长度 这没有任何意义,因为当我运行此代码时,显然有一个正长度(数据存在)

 #print data in the first group
 list1[[1]]$parameterX

  #how to put all means in a dataframe?
  # how to put all standard deviations in the same dataframe
  ex  df1 <- mean(2,2,3,4,7,2,4,,9,8,9),
             sd (0.1, 3 , 0.5, . . .)

3 个答案:

答案 0 :(得分:0)

我认为这可能是一个使用tapply的好地方。有一个很好的总结here!前进的一条路径可能是以下的扩展:

df <- data.frame(id= c(rep("AA",10),rep("BB",10)),  x=runif(20))
do.call("rbind", tapply(df$x, df$id, summary))

答案 1 :(得分:0)

我认为这就是你想要的:

require(dplyr)
dt<-rbind(iris,iris,iris)
dataframe_size <- nrow(dt)
group_size <- 100
number_ofgroups <- round(dataframe_size / group_size)
df<-dt %>% 
# Creating the "bins" column using mutate
mutate(bins=cut(seq(1:dataframe_size),breaks=number_ofgroups)) %>%
# Aggregating the summary statistics by the bins variable
group_by(bins) %>% 
# Calculating the mean
summarise(mean.Sepal.Length = mean( Sepal.Length))


head(dt)

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

df

     bins mean.Sepal.Length
   (fctr)             (dbl)
1 (0.551,113]          5.597345
2   (113,226]          5.755357
3   (226,338]          5.919643
4   (338,450]          6.100885

答案 2 :(得分:0)

dplyr对于这种事情是如此的好。如果您创建一个新列,根据行位置分配“组”ID,则可以非常轻松地汇总每个组。我使用索引来帮助分配组ID。

install.packages('dplyr')
library(dplyr)

## Create index
df$index <- 1:nrow(df)  

## Assign group labels
df$group <- paste("Group", substr(df$index, 1, 1), sep = " ")  
df[df$index <= 100, 'group'] <- "Group 0"
df[df$index > 1000, 'group'] <- paste("Group", substr(df$index, 1, 2), sep = " ")
df[df$index > 10000, 'group'] <- paste("Group", substr(df$index, 1, 3), sep = " ")

## Get summaries    
df <- group_by(df, group)
summaries <- summarise(df, avg = mean(parameterX),
minimum = min(parameterX), 
maximum = max(parameterX),
med = median(parameterX),
Mode = mode(parameterX))

......等等。

希望这有帮助。