我有一个要比较两列的数据集。对于这些列不匹配的每一行,我想捕获另一个值的对应行值,并将其写入另一个数据帧。
输入数据
data <- structure(list(A = 1:7, B = c(1L, 2L, 1L, 1L, 1L, 9L, 9L), C = c(1L,
3L, 2L, 1L, 6L, 8L, 1L)), class = "data.frame", row.names = c(NA,
-7L))
预期产量
A
1 2
2 3
3 5
4 6
5 7
当前,我正在使用以下代码,但是当{strong>输入数据中的B
和C
列的值匹配时,这将导致空行。我想保留A
和B
不匹配的C
。
是否可以通过其他方式确保满足上述条件?
代码
ifelse(data$B == data$C,
data$A, "")
上述代码的输出
[1] "" "2" "3" "" "5" "6" "7"
答案 0 :(得分:1)
您可以在A
处选择B != C
个值,然后将其添加到新的数据框中。
data.frame(A = data$A[data$B != data$C])
# A
#1 2
#2 3
#3 5
#4 6
#5 7
如果您只需要值向量,就可以
data$A[data$B != data$C]
#[1] 2 3 5 6 7
在ifelse
中,我们用空格(""
替换了不满足条件的值,因此输出的长度与data
中的行数相同。
答案 1 :(得分:1)
我们可以只使用subset
subset(data, B != C, select = A)
# A
#2 2
#3 3
#5 5
#6 6
#7 7
或与filter
library(dplyr)
data %>%
filter(B != C) %>%
select(A)
或使用data.table
library(data.table)
setDT(data)[B != C, .(A)]