2014-11-03 84 views
0

我從來沒有真正使用dplyr並想知道如何在以下上下文中使用它。所以,我有以下兩個數據幀:使用dplyr根據兩個數據幀中的一列中的公共值對數據進行子集合

trainData <- read.csv("train.csv", header = TRUE, stringsAsFactors = FALSE) 
subscriptionData <- read.csv("subscriptions.csv", header = TRUE, stringsAsFactors = FALSE) 
> head(trainData) 
     account.id total 
1 001i000000NuOGY  0 
2 001i000000NuS8r  0 
3 001i000000NuPGw  0 
4 001i000000NuO7a  0 
5 001i000000NuQ2f  0 
6 001i000000NuOQz  0 

> head(subscriptionData) 
     account.id season package no.seats   location   section price.level total multiple.subs 
1 001i000000LhyR3 2009-2010 Quartet  2  San Francisco Premium Orchestra   1 1.0   no 
2 001i000000NuOeY 2000-2001 Full  2  San Francisco   Orchestra   2 2.0   no 
3 001i000000NuNvb 2001-2002 Full  2 Berkeley Saturday  Balcony Front   3 2.0   no 
4 001i000000NuOIz 1993-1994 Quartet  1  Contra Costa   Orchestra   2 0.5   no 
5 001i000000NuNVE 1998-1999 Full  2 Berkeley Sunday  Balcony Rear   4 2.0   no 

現在我想利用基於trainDataaccount.idsubscriptionData子集。我基本上想要採取subscriptionDataaccount.id子集也存在於trainData

我知道這是一個非常基本的問題,但我是全新的dplyr,並沒有任何線索。

+2

'subscriptionData%>%的過濾器(account.id在%$ trainData%account.id)'假設ID是唯一的。 – KFB 2014-11-03 04:56:02

+1

@hmi你可以使用'inner_join',即'inner_join(subscriptionData,trainData [,'account.id',drop = FALSE],by ='account.id')' – akrun 2014-11-03 06:05:46

+0

謝謝你們。解決了它:) – hmi 2014-11-03 08:38:56

回答

4

你想要一個半聯接:

subscriptionData %>% semi_join(trainData, by = "account.id") 
+2

@Burimi吧?這確實回答了這個問題。 – hadley 2014-11-03 16:54:10

+3

保存一下輸入那個傻管符號:'semi_join(subscriptionData,trainData,by =「account.id」)' - 我的意思是,當你連接一堆管道時管道是可愛的,但不要掛在管道上。 – Spacedman 2014-11-03 17:08:18

+3

@Spacedman是的,這裏沒有必要,但它很可能用於一系列轉換 – hadley 2014-11-03 17:35:43

相關問題