![](/img/trans.png)
[英]Making a new column based on matching two column IDs within the same dataframe in R
[英]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()
和使用ifelse
的base 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.