2016-11-25 68 views
0

我有3個數據幀。一個包含整套數字。第二和第三個數據幀包含具有某種特徵(類型1或類型2)的這些數字的子集。我想要做的是將這些數據幀合併爲一個,以便每個數字都被檢查爲類型1或類型2。與其他數據幀的值匹配的標籤值

例子:

numbers <- c("+333","+334", "+335", "+443", "+444", "+445", "+553", "+554", "+555") 
typeone <- c("+333","+334", "+335", "+443") 
typetwo <- c("+335", "+443", "+444", "+445") 
fs <- data.frame(numbers)   
to<- data.frame(typeone) 
tt<- data.frame(typetwo) 
合併 fstott

期望的結果:

numbers typeone typetwo 
1 333   yes 
2 334   yes 
3 335   yes  yes 
4 443   yes  yes 
5 444     yes 
6 445     yes 
7 553  
8 554  
9 555  

回答

2

試試這個:

data.frame(numbers = numbers, 
       typeone = numbers %in% typeone, 
       typetwo = numbers %in% typetwo) 

然後你就可以更換新的邏輯列,但是你想。

+0

也許這:'data.frame(數字=數字, typeone = ifelse(數字%in type typeone,「yes」,「」), typetwo = ifelse(numbers%in%typetwo,「yes」,「」))' –

+1

是的,這是最簡單的解決方案,但我沒有看到使用邏輯上的二進制字符串。所以我把它交給了OP。 –

+0

@AndreyKolyadin你是對的,如果你按照某人的建議去遍歷「是」,「」路線,那麼用戶可以更容易地將子集(需要)或稍後編入索引,而無需再次將其轉換爲邏輯。另外,使用'ifelse'也可能會減慢進程的不必要程度 – akrun

2

您可以嘗試順序合併。要獲得開箱即用的漂亮列名稱,您可以將名稱更改爲names(to) <- c("numbers", "typeone"),並將tt更改爲類似名稱。

to$mhm <- "yes" 
tt$mhm <- "yes" 

out <- merge(fs, to, by.x = "numbers", by.y = "typeone", all.x = TRUE) 
merge(out, tt, by.x = "numbers", by.y = "typetwo", all.x = TRUE) 

    numbers mhm.x mhm.y 
1 +333 yes <NA> 
2 +334 yes <NA> 
3 +335 yes yes 
4 +443 yes yes 
5 +444 <NA> yes 
6 +445 <NA> yes 
7 +553 <NA> <NA> 
8 +554 <NA> <NA> 
9 +555 <NA> <NA> 

,或將數據集在list,設置相同的列名,並使用Reducemerge

Reduce(function(...) merge(..., by= "numbers", all.x=TRUE), 
     list(fs, setNames(to, "numbers"), setNames(tt, "numbers"))) 
+0

@akrun可以通過編輯來改善我的問題。 –

相關問題