簡體   English   中英

如何根據 R 中匹配 IDS 的兩個不同長度的數據幀創建新列

[英]How to create new column based on two different length dataframe matching IDS in R

我有長度為 100 的 df1 看起來像

PID
123
234
T345
P456
567

我有另一個長度為 1000 的 df2 看起來一樣

PID
123
234
567
T678
P768
....

如果df2狀態為"1""0" PID匹配,我需要在df1創建新列

預期輸出:

PID    V1
123     1
234     1
T345    0
P456    0
567     1

我嘗試了 ifelse 條件,但由於長度不均勻而發生錯誤。

提前致謝

我建議使用match()和使用ifelsebase R方法:

#Data
df1 <- structure(list(PID = c("123", "234", "T345", "P456", "567")), class = "data.frame", row.names = 2:6)
df2 <- structure(list(PID = c("123", "234", "567", "T678", "P768")), row.names = 2:6, class = "data.frame")

現在代碼使用值之間的匹配,然后格式化為 0 或 1:

#Match
df1$NewVar <- df2[match(df1$PID,df2$PID),'PID']
df1$NewVar <- ifelse(is.na(df1$NewVar),0,1)

輸出:

   PID NewVar
1  123      1
2  234      1
3 T345      0
4 P456      0
5  567      1

你可以像下面這樣嘗試%in%

df1$V1 <- +(df1$PID %in% df2$PID)

這使

> df1
   PID V1
1  123  1
2  234  1
3 T345  0
4 P456  0
5  567  1

數據

> dput(df1)
structure(list(PID = c("123", "234", "T345", "P456", "567"), 
    V1 = c(1L, 1L, 0L, 0L, 1L)), row.names = c(NA, 5L), class = "data.frame")
> dput(df2)
structure(list(PID = c("123", "234", "567", "T678", "P768")), row.names = c(NA, 
5L), class = "data.frame")

暫無
暫無

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

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