[英]Subset R data frame based on string matches in two columns
我有一個包含三列和數千行的數據框。 前兩列(x和y)包含字符串,第三列(z)包含數字數據。 我需要根據前兩列中的匹配值對數據幀進行子集化。
x <- c("a", "b", "c", "d", "f", "g", "h", "i", "j", "k")
y <- c("h", "b", "k", "a", "g", "d", "i", "c", "f", "j")
z <- c(1:10)
df <- data.frame(x, y, z)
x y z
1 a h 1
2 b b 2
3 c k 3
4 d a 4
5 f g 5
6 g d 6
7 h i 7
8 i c 8
9 j f 9
10 k j 10
說這是我的桌子,我感興趣的值是“a”,“c”,“f”,“h”和“k”。 我只想返回x和y都包含五個中的一個的行,所以在這種情況下是行1和3。
我試過了:
df2 <- filter(df,
x == ("a" | "c" | "f" | "h" | "k") &
y == ("a" | "c" | "f" | "h" | "k"))
但這不適用於因子或字符串。 是否有相同或其他方式?
提前致謝。
我認為這會返回你想要的東西:
# build vector of necessary elements
mustHaves <- c("a", "c", "f", "h", "k")
# perform subsetting
df[with(df, x %in% mustHaves & y %in% mustHaves),]
x y z
1 a h 1
3 c k 3
數據
df <- data.frame(x, y, z, stringsAsFactors = FALSE)
用dplyr
df2 <- filter(df,
x %in% c("a" ,"c","f" ,"h","k") &
y %in% c("a" ,"c","f" ,"h","k"))
df2
x y z
1 a h 1
2 c k 3
關於什么:
df2 <- filter(df, grepl("[acfhk]",x) & grepl("[acfhk]",y))
使用dplyr
包
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.