在 R 中连接数据帧(1:n 关系)
Joining dataframes in R (1:n relation)
我有一个data.framedf1
df1 <- data.frame(id=1:10)
我还有第二个data.framedf2
df2 <- data.frame(id=1:100, key=sample(1:10,100,replace=T), var1=sample(c(TRUE, FALSE),100, replace=T), var2=sample(c("X", "Y"),100, replace=T))
变量df2$key
是副键,指向变量df1$id
。
现在,对于 df1
中的每个条目,在给定特定条件的情况下,我想检查 df2
中有多少条目。
一个例子:
如果 df1$id==5
我想创建一个变量 df1$count
来计算 data.frame df2
中的条目数,其中 df2$key==5
和 df2$var==TRUE
.
感谢您的帮助!
以下是在 base R 中的操作方法:
merge(df1, aggregate(var1 ~ key, df2, FUN = sum),
by.x = "id", by.y = "key", all.x = TRUE)
id var1
1 1 3
2 2 1
3 3 4
4 4 6
5 5 9
6 6 4
7 7 5
8 8 7
9 9 4
10 10 3
或使用 dplyr:
library(dplyr)
df2 %>%
filter(var1) %>%
count(key) %>%
right_join(df1, by = c("key" = "id"))
在这两种情况下,我们都先进行计数,然后将结果合并到 df1。
我有一个data.framedf1
df1 <- data.frame(id=1:10)
我还有第二个data.framedf2
df2 <- data.frame(id=1:100, key=sample(1:10,100,replace=T), var1=sample(c(TRUE, FALSE),100, replace=T), var2=sample(c("X", "Y"),100, replace=T))
变量df2$key
是副键,指向变量df1$id
。
现在,对于 df1
中的每个条目,在给定特定条件的情况下,我想检查 df2
中有多少条目。
一个例子:
如果 df1$id==5
我想创建一个变量 df1$count
来计算 data.frame df2
中的条目数,其中 df2$key==5
和 df2$var==TRUE
.
感谢您的帮助!
以下是在 base R 中的操作方法:
merge(df1, aggregate(var1 ~ key, df2, FUN = sum),
by.x = "id", by.y = "key", all.x = TRUE)
id var1
1 1 3
2 2 1
3 3 4
4 4 6
5 5 9
6 6 4
7 7 5
8 8 7
9 9 4
10 10 3
或使用 dplyr:
library(dplyr)
df2 %>%
filter(var1) %>%
count(key) %>%
right_join(df1, by = c("key" = "id"))
在这两种情况下,我们都先进行计数,然后将结果合并到 df1。