有两个数据帧:
x <- data.frame(numbers=c('1','2','3','4','5','6','7','8','9'), coincidence="NA")
和
y <- data.frame(numbers=c('1','3','10'))
如何检查y
中x
(1,3和10)中的观察是否也存在,并相应地填充x["coincidence"]
列(例如,使用YES | NO,TRUE |。FALSE ...)
我会在Excel中使用组合IFERROR
和VLOOKUP
的公式执行相同操作,但我不知道如何对R执行相同的操作。
注意:
我愿意将data.frames更改为表或使用库。具有要检查的数字(y
)的数据帧将永远不会有超过10-20个观测值,而另一个(x
)将永远不会有超过1K的观测值。因此,如果有必要,我还可以使用if
进行迭代
答案 0 :(得分:4)
我们可以创建与所需输出匹配的向量,并使用设置差异搜索,在适当的位置输出布尔TRUE
和FALSE
值。符号%in%
是一个二元运算符,它将左侧的值与右侧的值集进行比较:
x$coincidence <- x$numbers %in% y$numbers
# numbers coincidence
# 1 1 TRUE
# 2 2 FALSE
# 3 3 TRUE
# 4 4 FALSE
# 5 5 FALSE
# 6 6 FALSE
# 7 7 FALSE
# 8 8 FALSE
# 9 9 FALSE
答案 1 :(得分:0)
数字必须是因素,因为你已经设置了它们? (他们不是数字,而是性格。)如果没有,那很简单:
x <- data.frame(numbers=c('1','2','3','4','5','6','7','8','9'), coincidence="NA", stringsAsFactors=FALSE)
y <- data.frame(numbers=c('1','3','10'), stringsAsFactors=FALSE)
x$coincidence[x$numbers %in% y$numbers] <- TRUE
> x
numbers coincidence
1 1 TRUE
2 2 NA
3 3 TRUE
4 4 NA
5 5 NA
6 6 NA
7 7 NA
8 8 NA
9 9 NA
如果他们需要成为因素,那么你需要设置常用级别或使用as.character()。