我无法理解如何解决这个问题。任何人都可以帮我解决问题。
我有data.frame,如下所示
Gender Age BMI
Male 20 18
Male 40 22
Female 30 19
Male 50 24
Female 28 21
我想获取data.frame,如下所示
Age Range Male-BMI-Average Female-BMI-Average
0-25 ### ###
26-50 ### ###
我尝试使用剪切和dcast,但我无法理解如何在年龄范围内获得不同性别群体的平均值?
答案 0 :(得分:0)
我们可以使用cut
创建'AgeRange',然后使用dcast
data.table
将其转换为'wide'格式,这在data.table
中更容易dcast
有fun.aggregate
(此处我们将其指定为mean
)。
library(data.table)
dcast(setDT(df1)[, AgeRange := cut(Age, breaks = c(0, 25, 50),
labels = c("0-25", "26-50"))],
AgeRange~Gender, value.var = "BMI", mean)
# AgeRange Female Male
#1: 0-25 NaN 18
#2: 26-50 20 23
或者使用dplyr
,我们可以按cut
创建的'AgeRange'和summarise
分组,其中mean
的'BMI'对应于'男', “性别”专栏中的“女性”。
library(dplyr)
df1 %>%
group_by(AgeRange = cut(Age, breaks = c(0, 25, 50),
labels = c("0-25", "26-50"))) %>%
summarise(Male_BMI_Avg = mean(BMI[Gender=="Male"]),
Female_BMI_Avg = mean(BMI[Gender=="Female"]))
# AgeRange Male_BMI_Avg Female_BMI_Avg
# <fctr> <dbl> <dbl>
#1 0-25 18 NaN
#2 26-50 23 20
答案 1 :(得分:0)
这是使用dplyr和reshape2包的解决方案:
#Your Data
df<-read.table(header = TRUE, text="Gender Age BMI
Male 20 18
Male 40 22
Female 30 19
Male 50 24
Female 28 21")
library(dplyr)
results<-summarize(group_by(df, Gender, cut(df$Age, breaks=c(0, 25, 50))), mean(BMI))
library(reshape2)
names(results)<-c("Gender", "Age", "mean-BMI")
dcast(results, Age~Gender)