R - 删除超过 x 个字符的行
R - delete rows with more than x chars using which
我有一个包含 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
问题出在索引中。如果没有超过 5 个值,则 which
returns 中的条件都是 FALSE 和 which
returns integer(0)
,并用这个 return 没有索引列。
尝试使用逻辑:
df[!(nchar(as.character(df$u)) > 5),]
我有一个包含 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
问题出在索引中。如果没有超过 5 个值,则 which
returns 中的条件都是 FALSE 和 which
returns integer(0)
,并用这个 return 没有索引列。
尝试使用逻辑:
df[!(nchar(as.character(df$u)) > 5),]