2016-06-19 143 views
3

對不起,絕對初學者,所以有一些非常基本的問題!根據另一個數據框中的值對數據幀進行子集

我有一個非常大的數據集,列出了一個家庭的個人交易。示例如下。

# hh_id trans_type transaction_value 
# 1 hh1  food     4 
# 2 hh1  water     5 
# 3 hh1 transport     4 
# 4 hh2  water     3 
# 5 hh3 transport     1 
# 6 hh3  food    10 
# 7 hh4  food     5 
# 8 hh4 transport    15 
# 9 hh4  water    10 

我想創建一個新的數據框,其中列出的所有交易僅針對在「水」類別中具有交易的家庭。 (例如,我想要一個沒有以上hh3的df,因爲他們在「水」中沒有任何費用)

作爲第一步,我有一列數據框(hh_ids),只有家庭標識爲那些我想要的。然後,我如何對更大的數據框進行子集化,以刪除所有不屬於「水」類別開支的家庭的交易行?

數據

## data from @gung 
d <- read.table(text="hh_id trans_type transaction_value 
hh1 food 4 
hh1 water 5 
hh1 transport 4 
hh2 water 3 
hh3 transport 1 
hh3 food 10 
hh4 food 5 
hh4 transport 15 
hh4 water 10", header=T) 
+1

'DF2 < - DF1 [!DF1 $ TRANS_TYPE = 「水」,]' –

+1

@akrun欺騙起來......這肯定不是原來的問題 –

+0

你可以使用'library(data.table); setDT(df1)[,if(any(trans_type ==「water」)).SD,by = hh_id]'或'library(dplyr); df1%>%group_by(hh_id)%>%filter(any(trans_type ==「water」))'我確定會有一些蠢事,但不幸的是現在找不到它了。 (搜索谷歌花了將近10分鐘,仍然無法找到它,輸入答案而不是搜索欺騙程序效率更高嗎?) – akrun

回答

4
d <- read.table(text="hh_id trans_type transaction_value 
hh1 food 4 
hh1 water 5 
hh1 transport 4 
hh2 water 3 
hh3 transport 1 
hh3 food 10 
hh4 food 5 
hh4 transport 15 
hh4 water 10", header=T) 

dw <- as.character(with(d, hh_id[trans_type=="water"])) 
ds <- d[which(d$hh_id%in%dw),] 
ds 
# hh_id trans_type transaction_value 
# 1 hh1  food     4 
# 2 hh1  water     5 
# 3 hh1 transport     4 
# 4 hh2  water     3 
# 7 hh4  food     5 
# 8 hh4 transport    15 
# 9 hh4  water    10 
相關問題