删除所有字符串长度大于n的行。

10

我有一个数据框 m,我想删除所有 f_name 列中条目大于3的行。我认为我可以使用类似于以下内容的东西:


m <- m[-grep("nchar(m$f_name)>3", m$f_name]

@Umesh Awasthi,我不确定是否真的需要进行如此微不足道的编辑。 - joran
2
你需要重新措辞问题。根据你的代码,你不想删除“f_name列中条目大于3的所有行”。你想要删除f_name字符串长度大于3的行。 - neilfws
@joran:同意!!但如果这能提高可读性,那也没有什么坏处 :) - Umesh Awasthi
1
一个可重现的数据集肯定会很有帮助。 - Tyler Rinker
@UmeshAwasthi 我的观点实际上是,对整个问题中唯一的代码行进行轻微缩进并不能增强其可读性,而且这种微不足道的编辑通常被认为是一种麻烦,而不是有帮助的。 - joran
4个回答

21

稍微转述一下你的问题,你想要保留那些f_name中长度小于等于3的行。那么这个怎么样:

subset(m, nchar(as.character(f_name)) <= 3)

1
@hadely 这让我陷入了我今天调试的一个代码中。对于这个隐蔽问题的警告加一。 - Tyler Rinker
1
将条件语句包含在 isTRUE 中以消除 NA - aL3xa

7

对于那些寻求tidyverse方法的人,您可以使用dplyr::filter

m %>% dplyr::filter(nchar(f_name) > 3)

7

试试这个:

m[!nchar(as.character(m$f_name)) > 3, ]

1
必备的 data.table 解决方案:
setDT(m)
m[ nchar(f_name) <= 3 ]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接