2015-09-03 27 views
1

我需要查找數據幀列上的元素是否存在於另一個數據幀列中以檢索計數和總數。用戶grpl在數據幀列的每個元素上查找不同數據幀中的字符串

數據幀1

Details<-data.frame(FirstName=c("Carlos SM","Carlos JOH","Carlos WIL","Carlos JON","Carlos BR","Peter D","Peter MILL","Peter WILS","Peter MOO","Homer T"),Points=c("3","4","7","6","4","9","1","2","1","9")) 

數據幀2

Results <- data.frame(Person=c("Carlos","Homer","Peter")) 

理想的輸出將2列添加到所述數據幀稱爲結果之一的計數在Details數據框中找到每個字符串的次數,而另一個字符串用於總點數。像這樣

FirstName Appearances Total Points 
Carlos   5    24 
Perter   4    13 
Homer   2    13 
+1

是'Points'是一個數字或字符變量?因爲在你的例子中它的一個字符 –

回答

2

這應該做的伎倆

Results$Appearances=sapply(Results$Person,function(x) sum(grepl(x,Details$FirstName))) 
Results$`Total Points`=sapply(Results$Person,function(x) sum(grepl(x,Details$FirstName)*as.numeric(Details$Points))) 
Results 
    Person Appearances Total Points 
1 Carlos   5   22 
2 Homer   1   7 
3 Peter   4   11 

而且,好像在你的預期輸出的數字是一點點了。這真是令人困惑。這只是你的錯誤,還是你想要一些不明顯的字符匹配方式,會產生這樣的結果?

+0

感謝隊友我確實在我的結果總結:) – Blas

0

使用tidyrdplyr

library(tidyr) 
library(dplyr) 
Details %>% separate(FirstName, c("Person", "last"), " ") %>% 
      group_by(Person) %>% 
      summarise(Appearances = n(), 
         "Total Points" = sum(Points)) %>% 
      left_join(Results, .) 
相關問題