提问人:poole13 提问时间:10/10/2023 更新时间:10/10/2023 访问量:28
创建一个 Vector 以过滤掉多行 [duplicate]
Creating a Vector to filter out multiple rows [duplicate]
问:
我有一个数据框,其中包含一个名为“value”的变量。在该变量中,有数字范围(例如 90-94),但也有前面带有字母的范围,例如 LT、GE、LE 等。我想过滤掉前面有字母的行,只得到数字范围。
起初,我以为在过滤器语句中的字母后面加一个空格会起作用,但实际上,什么也没发生。
我的具体代码块:
OHperformance <- OHperformance %>%
filter(Value != ".",
Value !="PS",
Value !="LT ",
Value !="GE ",
Value != "LE ")
然后,我能够制作一个载体,但必须将它们全部单独标记。
OHperformance <- OHperformance %>%
filter(!Value %in% c("LT50", "LE5", "LE20", "LE10", "GE95", "GE90", "GE80", "GE50", ".", "PS"))
有没有更简单的方法可以摆脱带有 LE 或 GE 的行?
答:
0赞
SamR
10/10/2023
#1
删除带有字母的行的一种方法是查看如果从中删除非数字字符,是否会发生变化。我们可以使用正则表达式来匹配非数字字符:Value
"\\D"
\d:匹配任意数字。补码 \D 匹配任何非十进制数字的字符。
library(dplyr)
OHperformance |>
filter(
Value == gsub("\\D", "", Value)
)
# Value
# 1 9
# 2 10
# 3 7
# 4 8
# 5 6
# 6 3
注意 - 这假设您的列只有整数,因为它将替换小数点。如果您有带有小数点的数字,也不要替换它。您可以使用类似的东西:
Value == gsub("[^0-9\\.]|^\\.$", "", Value)
此模式将替换除数字和小数点之外的所有内容,但如果它是整个字符串,它将替换小数点。
替代方法 - 胁迫和放弃numeric
NA
或者,由于本质上您只想保留数值,因此您可以强制使用和删除值来强制列。as.numeric()
NA
OHperformance |>
filter(!is.na(as.numeric(Value)))
# Same output
示例数据
OHperformance <- structure(list(Value = c("LT50", "9", "10", "GE90", "LE5", "7",
"8", "6", "GE95", "3")), class = "data.frame", row.names = c(NA, -10L))
上一个:操作表键
评论
OHperformance %>% filter(!grepl("[A-Z]|\\.", value))