【问题标题】:R - delete rows with more than x chars using whichR - 使用 which 删除超过 x 个字符的行
【发布时间】:2019-01-15 21:05:38
【问题描述】:

我有一个包含 7 个变量的数据框。一些变量的字符比它们应该有的要多。为了找到一个值包含太多字符的行,我使用这个:

df <- df[-c(which(nchar(as.character(df$u)) > 5)), ]

所以应该删除 df$u 中超过 5 个字符的每一行。问题是这种方法会删除所有内容。在这种情况下,df$u 中没有超过 5 个字符的值,因此不应删除任何内容。如果我将上面的行更改为

df <- df[-c(which(nchar(as.character(df$u)) > 4)), ]

删除了两行,这是正确的,因为df$u 有两次超过 4 个字符。

问题是我无法弄清楚问题出在哪里。它对数百个文件工作得很好,但突然停止工作。

df的小代码示例:

station date u v w temp dir
Balc 2017.12.25_0:0:0.005940 0.66 0.81 0.65 2.22 320.8
Balc 2017.12.25_0:0:0.106316 0.34 0.53 0.36 2.22 327.5
Balc 2017.12.25_0:0:0.205374 0.4456786 0.60 0.49 2.20 323.9
Balc 2017.12.25_0:0:0.306819 0.43 0.35 0.82 2.22 309.5

【问题讨论】:

  • 只做df[nchar(df$u)&lt;=5,]df[!(nchar(df$u)&gt;5),] 不需要whichas.character
  • 一个可重现的例子在这里会很有帮助

标签: r row nchar


【解决方案1】:

问题在于索引。如果没有超过 5 个值,则 which 中的条件返回所有 FALSE 并且 which 返回 integer(0),并且使用此索引列不返回任何内容。 尝试逻辑:

df[!(nchar(as.character(df$u)) > 5),]

【讨论】:

  • 谢谢!不知道为什么我没有注意到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-01
  • 2020-03-19
  • 2015-10-29
  • 2015-06-07
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
相关资源
最近更新 更多