用于计算汇总统计信息的函数&;应用于R中的列
我需要编写一个函数,它接受一个数字输入向量,以便计算最小值、平均值、中值和最大值的汇总统计信息。结果应该是长度为4的向量。然后我需要将其应用于数据框中的所有列,并生成一个新的数据框,其中包含5列的结果 原始数据帧如下所示(部分): 我试着编写这样的函数:用于计算汇总统计信息的函数&;应用于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
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.ecommodities%>%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个汇总统计数据提供了相同的数字。此外,我需要列中的最小值、平均值、中值、最大值,而不是行中的值。)(