【发布时间】:2021-06-28 23:45:25
【问题描述】:
我有一个以下结构的数据集(虚拟数据,但与我的数据相似):
data <- data.frame(msg = c("this is sample 1", "another text", "cats are cute", "another text", "", "...", "another text", "missing example case", "cats are cute"),
no = c(1, 15, 23, 9, 7, 5, 35, 67, 35),
pat = c(0.11, 0.45, 0.3, 0.2, 0.6, 0.890, 0.66, 0.01, 0))
我对@987654322@ 专栏感兴趣。我需要在新列(即usable)中用TRUE 或FALSE标记每一行。此标签必须在条件下完成:
- 如果
msg单元格为空(NA 或空字符串)=> FALSE - 如果
msg单元格只有符号(没有字母没有数字)=> FALSE - 如果
msg已经存在(假设行按升序排列)=> FALSE。请注意,第一个条目将为 TRUE,而重复的条目将为 FALSE。我不关心其他列(它们与比较无关),但就我的最终结果而言,我需要拥有所有列。
我用 for 做了一个非常冗长的方法,但我正在寻找更短且性能更好的方法,因为原始数据集很长。
【问题讨论】:
-
你可以试试
transform(data, usable = with(data, grepl("[A-Za-z0-9]", msg) & !duplicated(msg)))。 -
如果您将此添加为答案,我会接受。像魅力一样工作