【问题标题】:Using dplyr to subset a data based on common values in one column from two data frames使用 dplyr 根据来自两个数据帧的一列中的公共值对数据进行子集化
【发布时间】:2014-11-03 03:26:15
【问题描述】:

我从未真正使用过 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.id 获取subscriptionData 的子集。我基本上想采用account.idsubscriptionData 的子集,它们也存在于trainData 中。

我知道这是一个非常基本的问题,但我是全新的 dplyr 并且不知道。

【问题讨论】:

  • subscriptionData %&gt;% filter(account.id %in% trainData$account.id) 假设 id 是唯一的。
  • @hmi 你可以使用inner_join,即inner_join(subscriptionData, trainData[,'account.id',drop=FALSE], by='account.id')
  • 谢谢大家。解决了:)

标签: r dataframe dplyr


【解决方案1】:

你想要一个半连接:

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

【讨论】:

  • @Burimi 嗯?这确实回答了这个问题。
  • 省去输入那个愚蠢的管道符号:semi_join(subscriptionData, trainData, by="account.id") - 我的意思是当你把一堆管道串起来时,管道很可爱,但不要被管道迷住。
  • @Spacedman 是的,这里没有必要,但很可能会在一系列转换中使用
猜你喜欢
  • 2018-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多