如何在R中循环使用两个列表
我有一个包含人口统计信息和问题的数据集如何在R中循环使用两个列表,r,list,loops,nested,R,List,Loops,Nested,我有一个包含人口统计信息和问题的数据集 DF<-(Participant = c(1,2,3,4,5,6,7,8,9,10) Male = c(1,0,1,1,0,1,0,0,1,0) Female = c(0,1,0,0,1,0,1,1,0,1) Q1 = c(9,6,5,4,5,1,3,5,5,2) Q2 = c(2,4,5,4,2,1,3,5,4,2) Q3 = c(6,8,2,7,5,2,1,1,6,3)) 如果有任何帮助,我将不胜感激 提前谢谢 更新: 在朋友的帮助下,我找到了
DF<-(Participant = c(1,2,3,4,5,6,7,8,9,10)
Male = c(1,0,1,1,0,1,0,0,1,0)
Female = c(0,1,0,0,1,0,1,1,0,1)
Q1 = c(9,6,5,4,5,1,3,5,5,2)
Q2 = c(2,4,5,4,2,1,3,5,4,2)
Q3 = c(6,8,2,7,5,2,1,1,6,3))
如果有任何帮助,我将不胜感激
提前谢谢
更新:
在朋友的帮助下,我找到了解决问题的方法。但是,您如何使其更有效率
df.list <- list()
for(question in questions){
question.df <- (DF[, lapply(.SD,sum, na.rm=T), by=question,
.SDcols=c(demographic)])
df.list <- append(df.list, question.df)}
list_new <- bind_cols(df.list, .id = "column_label")
df.listlibrary(tidyr)
图书馆(dplyr)
df%
突变(性别=ifelse(男性=1,“M”,“F”))%>%
选择(-Male,-Female)%>%
pivot_longer(cols=以“Q”开头),名称为“\u to=“Q”)%>%
按性别划分的组别(Q)%>%
汇总(值=总和(值))%>%
轴心(姓名来源=性别)
给出:
Q F M
<chr> <dbl> <dbl>
1 Q1 21 24
2 Q2 16 16
3 Q3 18 23
qfm
第一季21 24
2第2季度16
第3季度18 23
根据您想要对输出执行的操作,另一种方法是使用表格::表格()
,该方法可用于生成其他统计信息(例如百分比),以及自定义行和列标题
我们将使用问题中提供的数据生成一个简单的表
df <- data.frame(Participant = c(1,2,3,4,5,6,7,8,9,10),
Male = c(1,0,1,1,0,1,0,0,1,0),
Female = c(0,1,0,0,1,0,1,1,0,1),
Q1 = c(9,6,5,4,5,1,3,5,5,2),
Q2 = c(2,4,5,4,2,1,3,5,4,2),
Q3 = c(6,8,2,7,5,2,1,1,6,3))
df$sex <- ifelse(df$Male == 1,"M","F")
library(tables)
tabular((Q1 + Q2 + Q3)~Factor(sex)*(sum),data=df)
处理多个人口统计变量
在对我的回答的评论中,有人问了一个问题,关于如何将tabular()
与多个人口统计变量结合使用
我们可以结合使用lappy()
、paste()
和substitute()
来为“tablar()构建正确的公式表达式
为了说明这个过程,我们将在上面列出的数据框中添加第二个人口统计变量,Income
。然后我们创建一个向量来表示人口统计变量列表,我们将为其生成表格。最后,我们使用向量和lappy()
生成表
df <- data.frame(Participant = c(1,2,3,4,5,6,7,8,9,10),
Male = c(1,0,1,1,0,1,0,0,1,0),
Female = c(0,1,0,0,1,0,1,1,0,1),
Income = c(rep("low",5),rep("high",5)),
Q1 = c(9,6,5,4,5,1,3,5,5,2),
Q2 = c(2,4,5,4,2,1,3,5,4,2),
Q3 = c(6,8,2,7,5,2,1,1,6,3))
df$Sex <- ifelse(df$Male == 1,"M","F")
library(tables)
tabular((Q1 + Q2 + Q3)~Factor(Sex)*(sum),data=df)
demoVars <- c("Sex","Income")
lapply(demoVars,function(x){
# generate a formula expression including the column variable
# and use substitute() to render it correctly within tabular()
theExpr <- paste0("(Q1 + Q2 + Q3) ~ Factor(",x,")*(sum)")
tabular(substitute(theExpr),data=df)
})
df第一个代码块运行不正常。也许你的意思是:`DF这真的很有用,但是我如何遍历包含80个人口统计变量的列表?@lightsout-我们可以使用lappy()
生成一组表,每个表对应一个人口统计变量。我会在接下来的24小时内发布一个更新,说明如何做到这一点。谢谢你Len!这将是非常有用的,你简直不敢相信。@lightsout-正如我承诺的那样,我添加了一些代码来说明如何使用tabular()
生成包含各种人口统计变量的多个表。你可以使用lee(n)gend!非常感谢。
Q F M
<chr> <dbl> <dbl>
1 Q1 21 24
2 Q2 16 16
3 Q3 18 23
df <- data.frame(Participant = c(1,2,3,4,5,6,7,8,9,10),
Male = c(1,0,1,1,0,1,0,0,1,0),
Female = c(0,1,0,0,1,0,1,1,0,1),
Q1 = c(9,6,5,4,5,1,3,5,5,2),
Q2 = c(2,4,5,4,2,1,3,5,4,2),
Q3 = c(6,8,2,7,5,2,1,1,6,3))
df$sex <- ifelse(df$Male == 1,"M","F")
library(tables)
tabular((Q1 + Q2 + Q3)~Factor(sex)*(sum),data=df)
> tabular((Q1 + Q2 + Q3)~Factor(sex)*(sum),data=df)
sex
F M
sum sum
Q1 21 24
Q2 16 16
Q3 18 23
df <- data.frame(Participant = c(1,2,3,4,5,6,7,8,9,10),
Male = c(1,0,1,1,0,1,0,0,1,0),
Female = c(0,1,0,0,1,0,1,1,0,1),
Income = c(rep("low",5),rep("high",5)),
Q1 = c(9,6,5,4,5,1,3,5,5,2),
Q2 = c(2,4,5,4,2,1,3,5,4,2),
Q3 = c(6,8,2,7,5,2,1,1,6,3))
df$Sex <- ifelse(df$Male == 1,"M","F")
library(tables)
tabular((Q1 + Q2 + Q3)~Factor(Sex)*(sum),data=df)
demoVars <- c("Sex","Income")
lapply(demoVars,function(x){
# generate a formula expression including the column variable
# and use substitute() to render it correctly within tabular()
theExpr <- paste0("(Q1 + Q2 + Q3) ~ Factor(",x,")*(sum)")
tabular(substitute(theExpr),data=df)
})
> lapply(demoVars,function(x){
+ # generate a formula expression including the column variable
+ # and use substitute() to render it correctly within tabular()
+ theExpr <- paste0("(Q1 + Q2 + Q3) ~ Factor(",x,")*(sum)")
+ tabular(substitute(theExpr),data=df)
+ })
[[1]]
Sex
F M
sum sum
Q1 21 24
Q2 16 16
Q3 18 23
[[2]]
Income
high low
sum sum
Q1 16 29
Q2 15 17
Q3 13 28