根据列中的起始字母和星号的存在进行过滤

时间:2017-09-15 19:44:34

标签: r

我有一个大型数据框,有22列。我想基于第二列中的值进行过滤,因此如果值不以“X”开头,我想删除该行。如果第二列中的值包含星号,我也想删除该行。

test <- c(1, 2, 3, 4, 5, 6, 7, 8, 9)
secondcolumn <- c("Xidfhsfd*isjdf", "Hsuhdfskdh", "Xwidfsoid", "X*sdkfjjhsd", "Xkdsfhsd", "Uskesfudhsk", "Sdfukhsdiu", "Osdfihsdoiuh", "Xsodifdsifj")
othercolumn <- c(3, 5, 7,2, 5, 8, 3, 0, 5)

df <- as.data.frame(test, secondcolumn, othercolumn)

如何做到这一点?在这个例子中,我想删除第1行,第2行,第4行,第6行,第7行,第8行和第9行。

谢谢!

2 个答案:

答案 0 :(得分:2)

希望这有效

# Condition 1: value start with "X"
cond1 <- grep("^X", d[, 2])
# Condition 2: doesn't contain "*"
cond2 <- grep("\\*", d[, 2], invert = TRUE)
# Rows where any of condition is true
wantedRows <- intersect(cond1, cond2)
# Table without those rows
d[wantedRows, ]

enter image description here

答案 1 :(得分:2)

另一种选择是匹配&#39; X&#39;在字符串的开头(p = LoggedInUserSave.value(forKey: "PriceFilter") as! String Price : Int = Int(p)! )后跟一个或多个不是^*)的字符,直到字符串的结尾([^*]+)为止基于

的数字索引和子集行
$