0

我是 R 的新手,我相当琐碎的问题围绕着一个包含两个变量的数据框:薪水和性别以及数千个条目。我想做的是隔离数据,这样我就可以针对每个性别的工资执行基本的统计操作。我知道必须存在一些简单的操作才能做到这一点,但我似乎无法找到合适的功能。

4

3 回答 3

1

请包括一个可重现的示例,以及更多详细信息(什么“简单操作”?)这里有一些示例。

mydata <- data.frame(salary=runif(50,100,200),
    gender=as.factor(rep(c("male","female"),each=25)))
with(mydata, tapply(salary, gender, mean))

library(doBy)
summaryBy(salary ~ gender, FUN=c(mean,sd,min,max), data=mydata)
于 2013-08-14T03:23:51.807 回答
1

我非常喜欢的第三个选项是plyr包装。这会根据数据框的其中一列的值将数据框(或列表或数组)分成几部分。然后,您可以对数据框执行您喜欢的任何操作。这被称为数据分析的“拆分-应用-组合”策略。例如,如果您想要data每个工资和性别的独特组合的列的均值和标准差,您可以执行类似的操作

#load the package
require(plyr)

#make up some fake data
gender <- gl(2, 1, 100, labels=c("m", "f"))
# Note that I'm assuming salary will be a categorical variable
salary <- gl(5, 1, 100, labels=c("very low", "low", "medium", "high", "very high"))
data <- runif(100)

df <- data.frame(gender=gender, salary=salary, data=data)

# Calculate the mean for each combination of gender and salary
meanAndSD <- ddply(df, c("gender", "salary"), summarise, meanData=mean(data), sdData=sd(data))
print(meanAndSD)
于 2013-08-14T04:56:30.213 回答
0

在 R 中通常有几种方法可以完成相同的任务。另一种方法是使用by函数。继 Remko 的示例之后:

mydata <- data.frame(salary=runif(50,100,200),
    gender=as.factor(rep(c("male","female"),each=25)))
by(mydata,mydata$gender,function(x) mean(x$salary))
于 2013-08-14T05:45:37.203 回答