簡體   English   中英

檢查data.frame(x)中的觀測值是否也存在於data.frame(y)中並根據結果填充新列的最聰明方法

[英]Smartest way to check if an observation in data.frame(x) exists also in data.frame(y) and populate a new column according with the result

有兩個數據框:

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 (1、3和10)中的觀測值是否也存在於x並相應地填充x["coincidence"] (例如,使用YES | NO,TRUE | FALSE ...)。

我會在Excel中使用結合了IFERRORVLOOKUP的公式來執行相同的操作,但是我不知道如何使用R來執行相同的操作。

注意:我願意將data.frames更改為表或使用庫。 具有要檢查的數字( y )的數據框永遠不會有超過10到20個觀察值,而另一個( x )永遠不會有超過1K個觀察值。 因此,如果需要的if ,我也可以使用if進行迭代

我們可以通過設置差異搜索來創建與所需輸出匹配的向量,該搜索將在適當的情況下輸出布爾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

設置數字時,數字是否一定是要素? (它們不是數字,而是字符。)如果不是,這很容易:

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()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM