Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中循环使用两个列表_R_List_Loops_Nested - Fatal编程技术网

如何在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.list
library(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