根据另一个数据帧中的值对数据帧进行子集

时间:2016-06-19 16:13:49

标签: r subset

对不起绝对的初学者,所以有一些非常基本的问题!

我有一个非常大的数据集,列出了一个家庭的个人交易。示例如下。

#   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

我想创建一个新的数据框,其中列出的所有交易仅适用于在" water"类别。 (例如,我想要一个没有hh3的df,因为他们没有花费任何费用" water")

作为第一步,我有一个数据框,其中一列(hh_ids)只有我想要的家庭ID。然后,我如何将我的较大数据框子集化,以删除非来自家庭中的所有交易行,这些交易在" water"类别?

数据

## 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 个答案:

答案 0 :(得分: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