用于计算汇总统计信息的函数&;应用于R中的列

用于计算汇总统计信息的函数&;应用于R中的列,r,summary,R,Summary,我需要编写一个函数,它接受一个数字输入向量,以便计算最小值、平均值、中值和最大值的汇总统计信息。结果应该是长度为4的向量。然后我需要将其应用于数据框中的所有列,并生成一个新的数据框,其中包含5列的结果 原始数据帧如下所示(部分): 我试着编写这样的函数: commodities_summary <- function(x) { com_min <- min(x) com_mean <- mean(x) com_med <- median(x) com_ma

我需要编写一个函数,它接受一个数字输入向量,以便计算最小值、平均值、中值和最大值的汇总统计信息。结果应该是长度为4的向量。然后我需要将其应用于数据框中的所有列,并生成一个新的数据框,其中包含5列的结果

原始数据帧如下所示(部分):

我试着编写这样的函数:

commodities_summary <- function(x) {
  com_min <- min(x)
  com_mean <- mean(x)
  com_med <- median(x)
  com_max <- max(x)
  c(Min=com_min, Mean=com_mean, Median=com_med, Max=com_max)
}
commodities2 <- ddply(.data=commodities, 
                      .variables=c(1:48), 
                      .fun=commodities_summary)
> dput(head(commodities2,4))
structure(list(X1 = 2054.86, X2 = 2131.01, X3 = 1978.38, X4 = 1932.46, 
    X5 = 1775.8, X6 = 1668.96, X7 = 1758.07, X8 = 1783.63, X9 = 1655.07, 
    X10 = 1626.15, X11 = 1503.91, X12 = 1430.66, X13 = 1430.83, 
    X14 = 1452.38, X15 = 1442.95, X16 = 1369.23, X17 = 1297, 
    X18 = 1232.41, X19 = 1175.31, X20 = 1230.83, X21 = 1168.91, 
    X22 = 1140.18, X23 = 1081.85, X24 = 1130.88, X25 = 1113.26, 
    X26 = 1087.71, X27 = 1029.24, X28 = 996.21, X29 = 973.29, 
    X30 = 918.85, X31 = 957.85, X32 = 958.86, X33 = 959.53, X34 = 951.48, 
    X35 = 965.15, X36 = 987.39, X37 = 1076.53, X38 = 1230.46, 
    X39 = 1301.73, X40 = 1363.57, X41 = 1453.43, X42 = 1465.58, 
    X43 = 1520.21, X44 = 1603.67, X45 = 1613.73, X46 = 1566.26, 
    X47 = 1516.73, X48 = 1549.34, Min = 7.45, Mean = 937.015208333333, 
    Median = 172.15, Max = 16973.59), .Names = c("X1", "X2", 
"X3", "X4", "X5", "X6", "X7", "X8", "X9", "X10", "X11", "X12", 
"X13", "X14", "X15", "X16", "X17", "X18", "X19", "X20", "X21", 
"X22", "X23", "X24", "X25", "X26", "X27", "X28", "X29", "X30", 
"X31", "X32", "X33", "X34", "X35", "X36", "X37", "X38", "X39", 
"X40", "X41", "X42", "X43", "X44", "X45", "X46", "X47", "X48", 
"Min", "Mean", "Median", "Max"), row.names = 1L, class = "data.frame")

我需要一个数据框,以便在第一列中有列(铝、香蕉、大麦等)的名称,然后在下面4列中有每个摘要统计信息。

IMHO这将满足您的要求:

sapply(commodities, commodities_summary)
最终转置结果。带有
汽车的示例

> sapply(cars, commodities_summary)
       speed   dist
Min      4.0   2.00
Mean    15.4  42.98
Median  15.0  36.00
Max     25.0 120.00
因为您的数据不是数据帧,所以您必须执行以下操作:

sapply(as.data.frame(commodities), commodities_summary)
或者,如果您想转换结果:

t(sapply(as.data.frame(commodities), commodities_summary))

IMHO这将满足您的要求:

sapply(commodities, commodities_summary)
最终转置结果。带有
汽车的示例

> sapply(cars, commodities_summary)
       speed   dist
Min      4.0   2.00
Mean    15.4  42.98
Median  15.0  36.00
Max     25.0 120.00
因为您的数据不是数据帧,所以您必须执行以下操作:

sapply(as.data.frame(commodities), commodities_summary)
或者,如果您想转换结果:

t(sapply(as.data.frame(commodities), commodities_summary))

不要以图片形式发布数据,请学习如何使用
dplyr
进行测试,即
commodies%>%group\u by_u(name(commodies)[1:48])%%>%summary\u each(fun(commodities\u summary())
您发布的图片不容易被其他人测试。正如@Jaap所提到的,请发布一个
dput
输出,即
dput(droplevels(head(yourdata,10))
我刚刚使用dput进行了更新,希望这会更好。对不起,我对R都是新手。不要以图片的形式发布你的数据,请学习如何使用
dplyr
I.e
commodities%>%group\u by_u(name(commodities)[1:48])%%>%summary\u each(fun(commodities\u summary(.))
你发布的图片不容易被其他人测试。正如@Jaap所提到的,请发布一个
dput
输出,即
dput(droplevels(head(yourdata,10))
我刚刚使用dput进行了更新,希望这会更好。对不起,我是R的新手。真的,你可以。。。无论如何,您添加了一个包含
cars
数据的示例。我尝试了此方法,但它为所有4个汇总统计数据提供了相同的数字。此外,我需要列中的最小值、平均值、中值、最大值,而不是行中的值:(实际上,您可以对……进行子集……无论如何,您添加了一个包含
cars
数据的示例。我尝试了这种方法,但它为所有4个汇总统计数据提供了相同的数字。此外,我需要列中的最小值、平均值、中值、最大值,而不是行中的值。)(