4

我在 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
4

3 回答 3

3

这是一个可能的解决方案,它在计算长度之间和data.table之间执行二进制连接,同时使用连接df1df2by = .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]
于 2015-05-31T10:23:51.473 回答
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
于 2015-05-31T09:49:55.673 回答
1

这是一个 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 自己找出要加入的列(在本例中为“买方”)。

于 2015-05-31T10:31:28.587 回答