如何匹配数据框中的两列逻辑向量

How to match two columns of logical vectors within a data frame

这是一些伪代码及其非常明显的输出:

xdupe <- as.logical(c("T", "F", "F", "F", "T", "T", "F"))
ydupe <- as.logical(c("T", "F", "F", "F", "F", "T", "T"))
cities <- c("Knox", "Whiteville", "Madison", "York", "Paris", "Corona", "Bakersfield")
df <- data.frame(cities, xdupe, ydupe)
df$cities <- as.character(df$cities)

> df
       cities xdupe ydupe
1        Knox  TRUE  TRUE
2  Whiteville FALSE FALSE
3     Madison FALSE FALSE
4        York FALSE FALSE
5       Paris  TRUE FALSE
6      Corona  TRUE  TRUE
7 Bakersfield FALSE  TRUE

对于某些上下文,xdupe 和 ydupe 代表的是重复的 x 和 y 坐标(分别是经度和纬度)的逻辑值。

所以我需要做的是查看数据框中的哪些属性对于 xdupe 和 ydupe 具有 TRUE 值。在这种特殊情况下,这将是城市诺克斯和科罗纳。我如何比较 xdupe 和 y dupe 以便我可以提取所有具有两个真实值的城市?

这可以通过多种方式完成。一种选择是 &。只有当所有的元素都是TRUE时,它才会变成TRUE。所以,如果我们使用xdupe & ydupe,它会比较'xdupe'和'ydupe'对应的元素,只有当两个元素都是'TRUE'.[=19时才会得到TRUE =]

i1 <- with(df, xdupe & ydupe)

或者另一种选择是 rowSums 仅包含逻辑列的数据集子集。由于 TRUE 的二进制表示为 1,FALSE 为 0,当每个对应元素都为 TRUE 时,结果为 2.

i1 <- rowSums(df[-1])==2

然后我们对数据集进行子集化

Subdf <- df[i1,]
Subdf
#   cities xdupe ydupe
#1   Knox  TRUE  TRUE
#6 Corona  TRUE  TRUE