以下是一些示例数据
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
这似乎很容易,但我认为使用大数据快速完成此操作并非易事。最初我计划进行循环循环,但我确信必须有一个术语来进行这种比较,并且可能包含已经做类似事情的包。
答案 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)
您需要which
和table
。
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
做两件事A %>% select(id)
inner_join(B %>% select(id) ) %>%
distinct
B %>% count(id)