【问题标题】:R remove column of df inside list of listR删除列表列表中的df列
【发布时间】:2020-02-04 12:34:27
【问题描述】:

您好,我有以下结构:

list
- list
-- df
--- column

数据样本

participants <- list(list(data.frame("col1", "col2"),data.frame("col1", "col2"),data.frame("col1", "col2")),
         list(data.frame("col1", "col2"),data.frame("col1", "col2"),data.frame("col1", "col2")))

我正在尝试为每个参与者的每个数据框删除 col1。我可以单独使用participants[[1]][[2]]$col1 &lt;- NULL 但我正在努力通过循环来自动化它。这些不返回错误,但似乎什么也不做。

for( p in participants){
  for (i in p){
    i$col1 <- NULL
  }
}

drop <- c("col1")
for( p in participants){
  for (i in p){
    i[ , !(names(i) %in% drop)]
  }
}

【问题讨论】:

  • 最好制作最少的数据样本(并以可重现的形式发布)。
  • 您的示例数据框没有名为“col1”的列。

标签: r list loops dataframe


【解决方案1】:

我们需要双循环,比如:

lapply(myList, function(i) lapply(i, function(j) j[, !colnames(j) %in% drop ]))

【讨论】:

    【解决方案2】:

    这是使用dplyrpurrr 的解决方案。

    library(purrr)
    library(dplyr)
    
    
    p <- list(list(data.frame("col1", "col2"),data.frame("col1", "col2"),data.frame("col1", "col2")),
             list(data.frame("col1", "col2"),data.frame("col1", "col2"),data.frame("col1", "col2")))
    
    map_depth(p, 2, ~select(.x, -X.col1.))
    

    【讨论】:

      猜你喜欢
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-15
      • 1970-01-01
      • 2021-12-05
      相关资源
      最近更新 更多