假设我有一个包含多行和多列的数据集,我想记录每列的最小值,最大值和平均值,并将这些数据存储在自己的表中。如何以能够为每列找到此数据的方式遍历数据框?
编辑:我的初始数据存储在一个类似于Initial Data的tbl中,我希望输出看起来像这样Output Data
答案 0 :(得分:0)
查看包dplyr
,这将使这项任务更加简单!
这是一种仅使用dplyr
的方法。格式并不完全是输出数据中的内容......
> df <- data.frame(A=c(7,2,4), B=c(5,4,6), C=c(7,9,1)) # Your Initial Data
> library(dplyr)
> df %>% summarise_all(.funs=funs(mean, min, max)) ## Approach 1: just dplyr
A_mean B_mean C_mean A_min B_min C_min A_max B_max C_max
1 4.333333 5 5.666667 2 4 1 7 6 9
或者,如果您还使用包tidyr
,则可以获得输出数据所需的格式:
> library(tidyr)
> df %>%
+ gather(Column, Value) %>% ## Converts dataframe from wide to long format
+ group_by(Column) %>% ## Groups by the new column containing old column names
+ summarise(Max=max(Value), Min=min(Value), Mean=mean(Value)) ## The summary functions
# A tibble: 3 x 4
Column Max Min Mean
<chr> <dbl> <dbl> <dbl>
1 A 7.00 2.00 4.33
2 B 6.00 4.00 5.00
3 C 9.00 1.00 5.67
使用这些软件包的一个优点是,与df
相比,使用显式循环可能更有效。
答案 1 :(得分:0)
我建议你使用长桌而不是宽桌。虽然最后一个会使人眼更简单,但前者更易于操作以进行数据分析。也就是说,我认为您可以使用data.table
包来实现这一目标:
# create a data frame
df <- data.frame(A=c(7,2,4), B=c(5,4,6), C=c(7,9,1))
# load data.table package
require(data.table)
# convert df to a data.table
setDT(df)
#Explanation of the following code:
# melt: turns your wide table into a long one
# .(val_mean ...) calculate and give names to calculated variables
# by = ... : group by variable. See data.table vignette
melt(df)[, .(val_mean = mean(value),
val_min = min(value),
val_max = max(value)),
by = variable]
产生:
variable val_mean val_min val_max
1: A 4.333333 2 7
2: B 5.000000 4 6
3: C 5.666667 1 9