匹配来自不同列/数据帧的数据 - 在R

时间:2015-11-01 19:27:49

标签: r

以下是一些示例数据

    Dataset A
    id       name      reasonforlogin
    123      Tom       work
    246      Timmy     work
    789      Mark      play

   Dataset B
   id       name      reasonforlogin
   789      Mark      work
   313      Sasha     interview
   000      Meryl     interview
   987      Dara      play
   789      Mark      play
   246      Timmy     work

两个数据集。相同的列。行数不均匀。

我希望能够说出类似

的内容

1)“我想要在datasetA和datasetB中都出现所有的id号”

2)“我想知道每天有多少次ID登录,比如第2天。”

答案

1)所以像

这样的列表
    [246, 789]

2)所以data.frame带有“标题”ids,然后是他们登录号码的“行”。

    123, 246, 789, 313, 000, 987

    0, 1, 2, 1, 1, 1

这似乎很容易,但我认为使用大数据快速完成此操作并非易事。最初我计划进行循环循环,但我确信必须有一个术语来进行这种比较,并且可能包含已经做类似事情的包。

3 个答案:

答案 0 :(得分:3)

如果我们将A作为第一个数据集,将B作为第二个数据集,并将id作为两个字符列,以防止000被打印为0,我们可以......

两个数据集共有的

id

intersect(A$id, B$id)
# [1] "246" "789"

第二天(id)登录B的时间,包括那些根本没有登录的人:

table(factor(B$id, levels = unique(c(A$id, B$id))))

# 123 246 789 313 000 987 
#   0   1   2   1   1   1 

答案 1 :(得分:0)

您需要whichtable

1)查找data.frames中的哪些ID

common_ids <- unique(df1[which(df1$id %in% df2$id), "id"])

在这个简单的情况下,使用intersect和其他答案一样更优雅。 {}当你需要进行的比较比简单的平等更复杂时,which提供了更大的灵活性,值得了解。

2)查找任何ID登录的次数

table(df1$id)

答案 2 :(得分:0)

你可以用dplyr

做两件事

1

A %>% select(id)
  inner_join(B %>% select(id) ) %>%
  distinct

2

B %>% count(id)