【发布时间】:2016-05-25 15:41:28
【问题描述】:
我有一个包含不同字符的列的数据表,我想检查所有行是否都以“99”、“15”、“16”或“17”开头并且有 4-5 个字符。
知道怎么做吗?我考虑过使用 grep,但它并没有真正起作用..!
谢谢
阿依达
【问题讨论】:
我有一个包含不同字符的列的数据表,我想检查所有行是否都以“99”、“15”、“16”或“17”开头并且有 4-5 个字符。
知道怎么做吗?我考虑过使用 grep,但它并没有真正起作用..!
谢谢
阿依达
【问题讨论】:
假设您的数据框名为 dat 并且 x 是感兴趣的列,以下将返回以所需字符开头且包含 4 或 5 个字符的所有行:
dat[grepl("^(15|16|17|99)", dat$x) & nchar(dat$x) %in% 4:5, ]
返回不符合条件的行:
dat[!(grepl("^(15|16|17|99)", dat$x) & nchar(dat$x) %in% 4:5), ]
以下是您评论的答案:
1) 检查所有行是否符合条件:
all(grepl("^(15|16|17|99)", dat$x) & nchar(dat$x) %in% 4:5)
2) 识别不符合条件的行:
which(!(grepl("^(15|16|17|99)", dat$x) & nchar(dat$x) %in% 4:5))
【讨论】:
dat[grepl("^(15|16|17|99)", dat$x) & nchar(dat$x) %in% 4:5, ] 则返回 TRUE。或者也许使用 which 语句可以返回与那行代码不匹配的行。