【问题标题】:how to eliminate element(dataframe) from a list in R if contain a specific word如果包含特定单词,如何从 R 中的列表中消除元素(数据框)
【发布时间】:2020-10-21 06:46:38
【问题描述】:

我有一个数据框。我将此数据帧划分为列表中每行 6 行的子帧。 如果在这些子帧中存在单词“#ERROR”,我希望删除所有数据帧(甚至在一行中包含特定单词)并接收具有较少数据帧的列表。然后我将再次转换数据框中的列表。我的问题是我尝试了不同的代码,但我无法弄清楚如何从列表中消除带有特定单词的子数据框。

我试试关注

a<-dataset 
View(a)
my.list<-split(a, rep(1:119, each = 6)) 

z=lapply(1:length(my.list), function(i) my.list[[i]] != "#ERROR")

但我得到的是 119 个元素 TRUE FALSE。但我想消除那些虚假的......请任何人帮助......

【问题讨论】:

  • 如果你这样做my.list[sapply(1:length(my.list), function(i) my.list[[i]] != "#ERROR")]会怎样?
  • 仅适用于从 1 到 12 的元素...从第 13 个元素直到 119 返回 Null .....通过检查数据没有那么多#ERROR

标签: r list dataframe tidyverse data-wrangling


【解决方案1】:

尝试使用sapply,因为它会返回一个向量而不是像lapply 这样的列表。

new.list <- my.list[sapply(1:length(my.list), function(i) 
                           all(my.list[[i]] != "#ERROR"))]

或者用Filter 稍微简化一下:

new.list <- Filter(function(x) all(x != "#ERROR"), my.list)

【讨论】:

  • 似乎有效,谢谢,但有些奇怪。也消除带有 NA 的行。在乞求中,我接受了 NA ...并且我只希望消除带有 #ERROR 的行。为什么还要消除带有 NA 的行?很奇怪,也许有一些解释,如何纠正?谢谢
  • @Adam 是的,因为 NA 与字符串相比返回 NA 参见 NA != 'A'。试试Filter(function(x) all(x != "#ERROR" | is.na(x)), my.list)
猜你喜欢
  • 2021-07-20
  • 1970-01-01
  • 2021-12-16
  • 2014-06-27
  • 2020-06-17
  • 1970-01-01
  • 2019-10-05
  • 1970-01-01
  • 2014-04-03
相关资源
最近更新 更多