我有条件的数据框:
df <- data.frame(Gender=c("Male", "Female", "Other"), AgeCat=c("young", "adult", "old"))
df
Gender AgeCat
1 Male young
2 Female adult
3 Other old
我有一个“主”数据框,我需要根据前一个数据框中包含的条件从中提取数据:
master <- data.frame(Country=c("US", "US", "ENG", "SPN", "MEX", "ARG"), Gender=c("Male", "Male", "Male", "Female", "Female", "Female"), AgeCat=c("young", "young", "old", "adult", "adult", "adult"), Height=c("134", "125", "169", "189", "176", "191"))
master
Country Gender AgeCat Height
1 US Male young 134
2 US Male young 125
3 ENG Male old 169
4 SPN Female adult 189
5 MEX Female adult 176
6 ARG Female adult 191
使用该apply
族中的函数之一,我试图master
基于的行创建的子集列表df
。
为了获得myList
如下列表:
Male_young <- subset(master, Gender=="Male" & AgeCat=="young")
Male_young
Country Gender AgeCat Height
1 US Male young 134
2 US Male young 125
Female_adult <- subset(master, Gender=="Female" & AgeCat=="adult")
Female_adult
Country Gender AgeCat Height
4 SPN Female adult 189
5 MEX Female adult 176
6 ARG Female adult 191
Other_adult <- subset(master, Gender=="Other" & AgeCat=="old")
Other_adult
[1] Country Gender AgeCat Height
<0 rows> (or 0-length row.names)
myList <- list(Male_young=Male_young, Female_adult=Female_adult, Other_old=Other_old)
myList
$Male_young
Country Gender AgeCat Height
1 US Male young 134
2 US Male young 125
$Female_adult
Country Gender AgeCat Height
4 SPN Female adult 189
5 MEX Female adult 176
6 ARG Female adult 191
$Other_old
[1] Country Gender AgeCat Height
<0 rows> (or 0-length row.names)
编辑我意识到我想展示一个例子可能太简单了。我实际上试图获取的是一个数据帧(或可以转换为数据帧或矩阵的列表),如下所示:
Conditions Individuals Mean_Height
1 Male_young 2 129.5
2 Female_adult 3 185.3333
3 Other_old 0 .
编辑2我一直坚持这种方法,但我不确定它是否非常有效:
df[c("Conditions", "Individuals", "Mean_Height")] <- t(
mapply(
function(X, Y, Z){
sub_df <- subset(X, Gender==Y & AgeCat==Z)
c(paste(Y, Z, sep="_"), nrow(sub_df), colMeans(sub_df$Height))
},
master,
df$Gender,
df$AgeCat
)
)
可能是您实际上想要这个吗?
master <- data.frame(Country=c("US", "US", "ENG", "SPN", "MEX", "ARG"), Gender=c("Male", "Male", "Male", "Female", "Female", "Female"), AgeCat=c("young", "young", "old", "adult", "adult", "adult"), Height=c("134", "125", "169", "189", "176", "191"), stringsAsFactors = FALSE)
df <- data.frame(Gender=c("Male", "Female", "Other"), AgeCat=c("young", "adult", "old"), stringsAsFactors = FALSE)
master %>%
group_by(Gender, AgeCat) %>%
summarise(mean(as.numeric(Height))) %>%
full_join(df)
导致
Gender AgeCat `mean(as.numeric(Height))`
<chr> <chr> <dbl>
1 Female adult 185.
2 Male old 169
3 Male young 130.
4 Other old NA
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句