大家好,我是 R 新手,我正在尝试在数据框中计算特定国家/地区的利润中位数。我尝试过低于一个,但它对我不起作用。
data("Forbes2000", package = "HSAUR")
median(Forbes2000[,"sales","country"="United States"])
median(Forbes2000$sales[Forbes2000$country == "United States"])
尽管如果不知道您的数据框是什么样子就很难确定。如果你想得到一个包含每个国家而不是一个国家中位数的 data.frame,你可以这样做:
library(plyr)
ddply(Forbes2000, "country", function(d) median(d$sales))
(您必须先安装plyr包,例如通过执行install.packages("plyr")
)。
David 已经回答了您最初的问题,并向您展示了一种查找多个国家中位数的方法。这是另一种方式:
您可以split
按国家/地区为每个国家/地区data.frame
创建一个list
data.frame
L <- split(Forbes2000, Forbes2000$country)
list
然后,您可以使用
lapply
或将函数应用于 的每个组件sapply
。(sapply
将结果简化为数组,而
lapply
返回 a list
)
sapply(L, function(x) {
median(x$sales)
})
或者,在一行中
sapply(split(Forbes2000, Forbes2000$country), function(x) median(x$sales))
我能够使用美国州在数据框“结果 3”中计算第 11 列中指标的中值:
tapply(outcome3[,11], outcome3$State, median)