【问题标题】:How to delete empty rows in multiple dataframes in a list如何删除列表中多个数据框中的空行
【发布时间】:2018-09-21 15:51:41
【问题描述】:

我有一个列表,其中包含总共 24 个不同行号的数据框。其中一些行具有空值,即既不是 NA 也不是 NULL,只有“”。这些行的数量因数据帧而异,但我想删除这些行。

示例数据框,但这几乎是列表中所有数据框的样子,有很多空值,还有一些我想保留的值。

>df <- data.frame(c("","","","A","","B","","","C"))
colnames(df) <- "sn"

> df
   sn
1   
2   
3   
4  A
5   
6  B
7   
8   
9  C

我尝试根据this pagethis page 直接删除这些行,将NA 添加到空行from this page,然后省略这些行,甚至test[complete.cases(df), ] from here。这些似乎都不起作用,因为列表中的任何数据帧都没有发生任何事情。我也尝试了列表中的一个数据框,就像这里显示的示例一样,但只有更多的行,但仍然没有变化。

从 Stack Overflow 上的各个页面,这些是我尝试解决的一些代码

1) df &lt;- lapply(df, function(x) sapply(df, nrow)&gt;0)

2) lapply(df, function(x){ df[rowSums(is.na(df)) != ncol(df),]})

3)df[!apply(df == "", 1, all),]

4) df[rowSums(df=="")!=ncol(df), ]

5)df[apply(df, 1, function(x) any(x != '')), ]

6a) df[df==""]&lt;-NA

6b) df[complete.cases(df),]

不幸的是,所有这些尝试都没有对数据框做任何事情,使其与上面列出的相同。

有什么建议吗?非常感谢您!

【问题讨论】:

  • 您确定您在行中看到 NULL 吗?并且您要删除至少一行或所有行中的 NA 和空行吗?
  • na.omit(list) 应该是lapply(list, na.omit)。或者只是不使用列表;如果它们都具有相同的列,请使用单个表...顺便说一句,重新 PS,您不需要准确地向我们提供您的数据,但是如果您可以构建一个示例,它应该会有所帮助。此处指导:stackoverflow.com/questions/5963269/…
  • 是的,您应该包含代码和reproducible data example。虽然这可能是您的第一篇书面文章,但肯定不是您第一次阅读许多 R 问题包含此类组件的文章!
  • @Parfait,我没有在行中看到 NULL,它们只是空的,空白。并回答您的问题;不,这不是我第一次阅读帖子,但阅读这些帖子并没有真正帮助我理解我自己是如何在这个页面上做到这一点的。

标签: r list dataframe


【解决方案1】:

考虑这些尝试的解决方案的组合。因为complete.cases()所有 列中检查NA 并且空字符串值与NA 不同,所以我们重新分配值然后运行completed.cases。调用data.frame() 下方的@ 以避免由于单列导致向量返回(删除对多列的调用)。

df_list <- list(
     data.frame(sn=c("","","","A","","B","","","C")),
     data.frame(sn=c("","","","A","","B","","","C")),
     data.frame(sn=c("","","","A","","B","","","C"))
)

new_df_list <- lapply(df_list, function(df) {
  df[df == ""] <- NA
  data.frame(sn = df[complete.cases(df),])   
})

new_df_list
# [[1]]
#   sn
# 1  A
# 2  B
# 3  C

# [[2]]
#   sn
# 1  A
# 2  B
# 3  C

# [[3]]
#   sn
# 1  A
# 2  B
# 3  C

【讨论】:

  • 非常感谢您的帮助!尽管这适用于示例数据集,但不幸的是,这似乎不适用于我的数据框列表。我不知道为什么,但我认为我的数据集的准备有问题,所以我再次查看它,现在它完美运行!再次感谢您!
猜你喜欢
  • 2011-03-16
  • 2019-11-25
  • 2018-10-28
  • 2021-11-06
  • 2021-10-19
  • 2021-11-30
  • 1970-01-01
  • 2023-02-11
  • 1970-01-01
相关资源
最近更新 更多