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

时间:2016-01-26 20:15:52

标签: r dataframe logical-operators

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

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,以便我可以拉出所有具有真正价值的城市?

1 个答案:

答案 0 :(得分:3)

这可以通过几种方式完成。一个选项是&。仅当所有元素都为TRUE时,它才会变为TRUE。因此,如果我们使用xdupe & ydupe,它会比较&#39; xdupe&#39;的相应元素。和&#39; ydupe&#39;只有当两个元素都是“真实”时才会获得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