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

Need help getting summary statistics for R data frame

这是我的数据(假设我有 1050 行数据如下所示)

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

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

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

例如,将 parameterX 的所有 10 个均值放在一个数据框中,将 parameterX 的所有 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). . .))

错误消息总是:

apply(...) 错误 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, . . .)

我认为这可能是使用 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))

我想这就是你想要的:

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

dplyr 对这种事情太好了。如果您创建一个根据行位置分配 'group' 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))

...等等。

希望对您有所帮助。