【问题标题】:For loop to create the same table out of list of dataframes in RFor循环从R中的数据框列表中创建相同的表
【发布时间】:2021-03-06 00:59:01
【问题描述】:

我正在尝试从数据框列表(每个 df 包含超过 2 列)中创建一个 2x2 表。但是,尝试使用 for 循环执行此操作时,我有点卡住了。下面是一些示例数据:

df1 <- data.frame(a = c(0, 1, 0, 1, 0, 1, 1, 1, 0, 1),
                  b = c("Pos", "Neg", "Pos", "Pos", "Neg", 
                        "Pos", "Neg", "Pos", "Pos", "Neg"),
                  c = c("Y", "N", "Y", "Y", "Y", "N", "N", "Y", "N", "Y"))
df2 <- data.frame(a = c(0, 1, 0, 1, 0, 1, 1, 1, 0, 1),
                  b = c("Pos", "Neg", "Pos", "Pos", "Neg", 
                        "Pos", "Neg", "Pos", "Pos", "Neg"),
                  c = c("Y", "N", "Y", "Y", "Y", "N", "N", "Y", "N", "Y"))
df3 <- data.frame(a = c(0, 1, 0, 1, 0, 1, 1, 1, 0, 1),
                  b = c("Pos", "Neg", "Pos", "Pos", "Neg", 
                        "Pos", "Neg", "Pos", "Pos", "Neg"),
                  c = c("Y", "N", "Y", "Y", "Y", "N", "N", "Y", "N", "Y"))

df_list <- list(df1,df2,df3)

上面的示例显示了 3 个完全相同的数据帧(因此在这种情况下,输出应该是 3 个具有相同值的表)。我想为每个数据框创建一个包含“b”和“c”列的表。我试图通过一个 for 循环来做到这一点(见下文)

for(i in 1:length(df_list)){
  table[[i]] <- table(df_list[[i]][2], df_list[[i]][3])
}

但是,这似乎不起作用。有什么想法吗?

谢谢!

【问题讨论】:

  • 您的预期输出是什么?你需要lapply(df_list, function(x) table(x[[2]], x[[3]])) 吗?
  • 是的,就是这样!谢谢!

标签: r dataframe


【解决方案1】:

您可以将lapplytable 一起使用:

lapply(df_list, function(x) table(x[[2]], x[[3]]))

或者使用列名。

lapply(df_list, function(x) table(x$b, x$c))

#[[1]]
     
#      N Y
#  Neg 2 2
#  Pos 2 4

#[[2]]
     
#      N Y
#  Neg 2 2
#  Pos 2 4

#[[3]]
     
#      N Y
#  Neg 2 2
#  Pos 2 4

【讨论】:

    【解决方案2】:

    你可以使用rbind.data.frame函数:

    new_df = rbind.data.frame(df1, df2, df3)
    

    然后删除列a:

    new_df = new_df[,c('b', 'c')]
    

    【讨论】:

      【解决方案3】:

      我们可以使用countmap

      library(purrr)
      library(dplyr)
      map(df_list, ~ .x %>%
              dplyr::count(b, c))
      

      【讨论】:

        猜你喜欢
        • 2014-03-31
        • 1970-01-01
        • 2018-08-28
        • 1970-01-01
        • 2020-07-18
        • 2020-01-06
        • 2021-08-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多