【问题标题】:How to unpack particular list elements into dataframes in R?如何将特定列表元素解压缩到 R 中的数据框中?
【发布时间】:2021-05-19 03:58:45
【问题描述】:

一直在研究这个问题,发现只有将列表元素合并到一个大数据框中的解决方案。但是,我正在努力只解包那些满足特定条件的元素。

df1 <- iris %>% filter(Sepal.Length > 2.5)
df2 <- mtcars %>% filter(qsec > 16)
not_neccessary <- head(diamonds, 10)
not_neccessary2 <- head(beaver1, 12)

data_lists <- list("#123 DATA" = df1, "CON" = not_neccessary2, "#432 DATA" = df2, "COM" = not_neccessary) 

我的目标是只转换名称中包含“DATA”的列表元素。我正在考虑在lapply 中编写一个循环函数:

a <- lapply(data_lists, function(x){if (x == "#+[1-9]+_+DATA"){new_df <- as.data.frame(x)}})

它不起作用。还试图制作一个for 循环:

for (i in list){
  if (i == "#+[1-9]+_+DATA"){
    df <- i
  }
}

它也不起作用。

是否有任何有效的功能可以在特定条件下将我的列表解压缩到特定的数据帧中?我的 R 技能非常糟糕,尤其是在编写函数方面,尽管我对这门语言并不陌生。对此感到抱歉。

【问题讨论】:

    标签: r list loops for-loop lapply


    【解决方案1】:

    使用grepl/grep 查找名称中包含“DATA”的列表并将列表子集化。

    result <- data_lists[grepl('DATA', names(data_lists))]
    #With `grep`
    #result <- data_lists[grep('DATA', names(data_lists))]
    

    【讨论】:

    • 为什么要指定names()
    • 因为您过滤数据的条件是基于列表的名称而不是实际数据本身。 df1 中没有任何与“数据”相关的值。该信息仅存在于data_lists 的名称中。
    【解决方案2】:

    使用%like%

    result <- data_lists[names(data_lists) %like% 'DATA']
    

    【讨论】:

      猜你喜欢
      • 2020-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      • 2022-07-06
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多