r 在 df1 中添加列以及 df2 中的行数(有条件的)
r add columns in df1 with count of rows in df2 (conditional)
我在 R 中有两个数据框,如下所示...我需要在 df1 中添加新列 (count_orders),其中包含 df2 中的订单数(或 df2 中的买家数)。
请帮忙
> df1
buyer city
1 A xx
2 B yy
3 C zz
> df2
order buyer item
1 1 A 1
2 2 A 2
3 3 B 1
4 4 A 2
5 5 B 1
6 6 C 3
7 7 C 4
预期输出:
> df1
buyer city count_orders
1 A xx 3
2 B yy 2
3 C zz 2
你可以试试:
df1$count_orders<-as.vector(table(df2$buyer)[as.character(df1$buyer)])
# buyer city count_orders
#1 A xx 3
#2 B yy 2
#3 C zz 2
这是一个可能的 data.table
解决方案,它在 df1
和 df2
之间执行二进制连接,同时使用 by = .EACHI
计算长度
library(data.table)
setkey(setDT(df2), buyer)
df2[df1, list(city, count_orders = .N), by = .EACHI]
# buyer city count_orders
# 1: A xx 3
# 2: B yy 2
# 3: C zz 2
替代方法(修改@nicolas 评论)可能是(将通过引用更新 df1
)
library(data.table)
setkey(setDT(df1), buyer)
df1[setDT(df2)[, .N, keyby = buyer], count_orders := i.N]
这是一个 dplyr 方法:
library(dplyr)
count(df2, buyer) %>% right_join(df1, "buyer")
#Source: local data frame [3 x 3]
#
# buyer n city
#1 A 3 xx
#2 B 2 yy
#3 C 2 zz
您可以使用 count(df2, buyer) %>% right_join(df1)
并让 dplyr 自行确定要加入的列(在本例中为 "buyer")。
我在 R 中有两个数据框,如下所示...我需要在 df1 中添加新列 (count_orders),其中包含 df2 中的订单数(或 df2 中的买家数)。 请帮忙
> df1
buyer city
1 A xx
2 B yy
3 C zz
> df2
order buyer item
1 1 A 1
2 2 A 2
3 3 B 1
4 4 A 2
5 5 B 1
6 6 C 3
7 7 C 4
预期输出:
> df1
buyer city count_orders
1 A xx 3
2 B yy 2
3 C zz 2
你可以试试:
df1$count_orders<-as.vector(table(df2$buyer)[as.character(df1$buyer)])
# buyer city count_orders
#1 A xx 3
#2 B yy 2
#3 C zz 2
这是一个可能的 data.table
解决方案,它在 df1
和 df2
之间执行二进制连接,同时使用 by = .EACHI
library(data.table)
setkey(setDT(df2), buyer)
df2[df1, list(city, count_orders = .N), by = .EACHI]
# buyer city count_orders
# 1: A xx 3
# 2: B yy 2
# 3: C zz 2
替代方法(修改@nicolas 评论)可能是(将通过引用更新 df1
)
library(data.table)
setkey(setDT(df1), buyer)
df1[setDT(df2)[, .N, keyby = buyer], count_orders := i.N]
这是一个 dplyr 方法:
library(dplyr)
count(df2, buyer) %>% right_join(df1, "buyer")
#Source: local data frame [3 x 3]
#
# buyer n city
#1 A 3 xx
#2 B 2 yy
#3 C 2 zz
您可以使用 count(df2, buyer) %>% right_join(df1)
并让 dplyr 自行确定要加入的列(在本例中为 "buyer")。