R从数据帧生成命名列表
我有一个条件数据框架:R从数据帧生成命名列表,r,apply,tidyverse,purrr,tidyr,R,Apply,Tidyverse,Purrr,Tidyr,我有一个条件数据框架: 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 编辑 我意识到我想展示一个太简单的例子。 我实际上想要得到的是一个数据帧(或一个可以转换为数据帧或矩阵的列表),如下所示: Conditions I
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
编辑
我意识到我想展示一个太简单的例子。
我实际上想要得到的是一个数据帧(或一个可以转换为数据帧或矩阵的列表),如下所示:
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
)
)
df[c(“条件”、“个体”、“平均身高”)]library(tidyverse)
df%
变异_if(is.factor,as.character)
大师%
变异_if(is.factor,as.character)
连接列表%semi_连接(df),主节点=主节点)
这将产生一个数据帧列表:
$`1`
Country Gender AgeCat Height
1 US Male young 134
2 US Male young 125
$`2`
Country Gender AgeCat Height
1 SPN Female adult 189
2 MEX Female adult 176
3 ARG Female adult 191
$`3`
[1] Country Gender AgeCat Height
<0 rows> (or 0-length row.names)
$`1`
国家性别年龄猫身高
1美国男青年134
2美国男青年125
$`2`
国家性别年龄猫身高
1 SPN成年女性189
2兆欧女性成人176
3 ARG成年女性191
$`3`
[1] 国家性别年龄猫身高
(或长度为0的行名称)
我正在回答您的第一个问题,然后我会考虑您的编辑。我会用一种方式,使用和
df%
完成(AgeCat、嵌套(国家、性别)、填充=列表(高度=NA))%>%
按性别、年龄划分的组百分比>
巢
鸟巢%
过滤器(!is.na(国家))%>%
选择(国家、性别、年龄、身高)
}) %>%
set_name(,nm=sprintf(“%s_%s”,pre$Gender,pre$AgeCat))
#>$女性(成人)
#>#tibble:3 x 4
#>国家性别年龄猫身高
#>
#>1 ARG成年女性191
#>2兆欧女性成人176
#>3 SPN成年女性189
#>
#>$Male_成人
#>#A tibble:2 x 4
#>国家性别年龄猫身高
#>
#>1名男性成人
#>2名美国成年男性
#>
#>$Other_成人
#>#tibble:0 x 4
#>#…有4个变量:国家、性别、年龄、身高
#>
#>$女/岁
#>#tibble:3 x 4
#>国家性别年龄猫身高
#>
#>1名ARG女性老年人
#>2兆欧女性老年人
#>3 SPN女性老年人
#>
#>$Male_old
#>#A tibble:2 x 4
#>国家性别年龄猫身高
#>
#>1男169岁
#>2岁美国男性
#>
#>$Other_old
#>#tibble:0 x 4
#>#…有4个变量:国家、性别、年龄、身高
#>
#>$Female_young
#>#tibble:3 x 4
#>国家性别年龄猫身高
#>
#>1名ARG女性青年
#>2兆欧女性青年
#>3 SPN女青年
#>
#>$Male_young
#>#tibble:3 x 4
#>国家性别年龄猫身高
#>
#>1名男青年
#>2美国男青年134
#>3美国男青年125
#>
#>$Other_young
#>#tibble:0 x 4
#>#…有4个变量:国家、性别、年龄、身高
由(v0.3.0)于2020年2月20日创建
编辑:包含所有问题的新答案
pre%
不稳定(%)%>%
变异(高度=数值(高度))%>%
绑定行(,df)%>%
完成(AgeCat、嵌套(国家、性别)、填充=列表(高度=NA))%>%
按性别、年龄划分的组百分比>
巢
鸟巢%
选择(国家、性别、年龄、身高)
}) %>%
设置\u名称(,nm=sprintf(“%s\u%s”,前$Gender,前$AgeCat))%>%
绑定行(,.id=“条件”)
计数%
计数(条件,name=“个人”)
DF%>%
分组依据(条件)%>%
过滤器(!is.na(高度))%>%
总结(平均高度=平均高度,na.rm=T))%>%
左联合(,计数)%>%
选择(条件、个体、平均身高)
#>通过=“条件”连接
#>#tibble:3 x 3
#>条件个人平均身高
#>
#>1名成年女性3 185。
#>2男2岁169
#>3男吴扬3130。
由(v0.3.0)于2020年2月20日创建
EDIT2:为了显示本例中的个体数量,我对生成的df做了一些细微的更改。由于NA的平均值不存在,因此返回NaN
pre%
不稳定(%)%>%
变异(高度=数值(高度))%>%
绑定行(,df)%>%
完成(AgeCat、嵌套(国家、性别)、填充=列表(高度=NA))%>%
按性别、年龄划分的组百分比>
巢
鸟巢%
选择(国家、性别、年龄、身高)
}) %>%
设置\u名称(,nm=sprintf(“%s\u%s”,前$Gender,前$AgeCat))%>%
绑定行(,.id=“条件”)
DF%>%
分组依据(条件)%>%
当(为.na(高度)~0时,突变(N=情况_),
真~1))%>%
总结(个体=总和(N),平均身高=平均身高(na.rm=T))
#>#tibble:6 x 3
#>条件个人平均身高
#>
#>1名成年女性3 185。
#>2女_老0南
#>3女_young 0楠
#>4男_成人0男
#>5男11岁169
#>6男2 130。
由(v0.3.0)于2020年2月20日创建,您真的想要这个吗
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)
master%
总结(平均值(如数字(高度))%>%
完全联接(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
Gender AgeCat`平均值(如数字(高度))`
1名成年女性185名。
2男169岁
3男青年130人。
4其他旧NA
你可以使用合并
你能在编辑时显示你的预期输出吗,那国家就不重要了,对吧?谢谢你的回答。我不确定在哪里可以用你的代码进行一些计算(见我的编辑)。@u31889我添加了另一个答案。让我知道,如果其中一个是你想要的。然后我会删除另一个。谢谢。我认为这几乎是可行的与我的编辑2虽然。谢谢。然而,我需要先掌握子集,然后计算这个子集。
$`1`
Country Gender AgeCat Height
1 US Male young 134
2 US Male young 125
$`2`
Country Gender AgeCat Height
1 SPN Female adult 189
2 MEX Female adult 176
3 ARG Female adult 191
$`3`
[1] Country Gender AgeCat Height
<0 rows> (or 0-length row.names)
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