【问题标题】:Removing only blank cells in R (not the entire row or column)仅删除 R 中的空白单元格(不是整行或整列)
【发布时间】:2015-07-04 19:33:57
【问题描述】:

所以我想删除数据集中所有空白的单元格。例如,如果我有这样的东西,其中 (..) 代表空白数字:-

1 10 .. 4
.. 9 10 8
14 8 12 16

我希望能够删除空白单元格,以便产生以下结果:-

1 10 10 4
14 9 12 8
   8    16

因此,即使列长度不同,它基本上也会删除值之间的所有空白单元格并将它们拉到一起。我会在 excel 中执行此操作,但我的数据集是 6000 x 6000 长,并且包含许多 excel 无法处理的空白单元格,所以我认为它可能通过 R 处理得更快。

我已经看过用 NA 替换空字符串然后执行 na.omit 等方法,但如果它只包含一个 NA 值,它们会消除整个行/列,这不是我想要的。即使出现 NA,我也想保留列中的所有值,如果有意义的话,我只想将这些值组合在一起。

【问题讨论】:

  • 试试df1[] <- lapply(df1, function(x) c(x[x!='..'], x[x=='..']))
  • 我刚刚尝试过,但它并没有删除任何空单元格,所有值仍然保留在原处。谢谢你的帮助
  • 我的评论是基于显示的输入数据。正如预期的输出所示,它确实发生了变化。使用dputdput(droplevels(head(yourdata))) 显示您的数据可能会更好
  • 值在那里,但如果说上面有一个空白单元格,它不会将值向上移动一列,如果这有意义吗?因此,如果在单元格 A3 中有一个空白单元格,并且 A4 包含一个值,我希望将 A3 删除,以便 A4 中的值向上移动一个。这就是你写的代码对你端显示的输入数据的作用吗?
  • 如果你有真正的 NA,它应该是 c(x[!is.na(NA)], x[is.na(NA)])

标签: r


【解决方案1】:

如果你的 data.frame 被命名为 df 那么:

df[df == ".."] <- NA

为了得到NAs,那么:

func<-function(i){
  x<-as.numeric(as.character(df[,i][!is.na(df[,i])]))
  xna<-as.numeric(as.character(df[,i][is.na(df[,i])]))
  newx<-c(x,xna)
}

do.call(cbind,lapply(1:length(df[1,]),func))

> do.call(cbind,lapply(1:length(df[1,]),func))
     [,1] [,2] [,3] [,4]
[1,]    1   10   10    4
[2,]   14    9   12    8
[3,]   NA    8   NA   16

【讨论】:

  • 啊,太好了,谢谢。但是,如何在不删除整行的情况下删除所有具有 NA 值的单元格?如果我这样做 na.omit 它会删除整行
  • 基本上我希望删除所有带有 NA 的单元格而不删除整行
  • 我不明白您所说的“已删除”是什么意思。在 R 中,NA 是空单元格的指示符。在您看到 NA 的地方,您看到的是一个空白单元格。
  • 所以想象一下,如果我有一列数字(让我们说 A 列)并且在单元格 A4 中有一个空白数字(标记为 NA),我想以这样的方式删除该单元格低于该单元格(即单元格 A5)的值移动到 A4 的位置
  • 这正是我提供的代码的作用。它将所有数字向上移动,并将所有空单元格移动到底部
猜你喜欢
  • 1970-01-01
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 2022-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多