最智能的方法来检查data.frame(y)中的观察是否也存在于data.frame(y)中并根据结果填充新列

时间:2016-01-14 16:54:37

标签: r dataframe

有两个数据帧:

x <- data.frame(numbers=c('1','2','3','4','5','6','7','8','9'), coincidence="NA")

y <- data.frame(numbers=c('1','3','10'))

如何检查yx(1,3和10)中的观察是否也存在,并相应地填充x["coincidence"]列(例如,使用YES | NO,TRUE |。FALSE ...)

我会在Excel中使用组合IFERRORVLOOKUP的公式执行相同操作,但我不知道如何对R执行相同的操作。

注意: 我愿意将data.frames更改为表或使用库。具有要检查的数字(y)的数据帧将永远不会有超过10-20个观测值,而另一个(x)将永远不会有超过1K的观测值。因此,如果有必要,我还可以使用if进行迭代

2 个答案:

答案 0 :(得分:4)

我们可以创建与所需输出匹配的向量,并使用设置差异搜索,在适当的位置输出布尔TRUEFALSE值。符号%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()。