在一个数据帧中聚合选定的观察值并将它们传输到另一个数据帧

时间:2014-08-14 09:53:45

标签: r dataframe

我是编程和R的新手,我试图找到这个问题的答案,但我没有成功。我想我需要一些嵌套for循环,但我无法绕过这个问题。

我有两个数据框。第一个包含客户信息,如姓名,年龄,地址等。这些客户都有一个独特的client.no。 在另一个数据框中,我有关于客户拥有的保险单的信息(大约是client_info df的六倍)。在这个数据框中,每行都有一个唯一的policy.no,并且还声明了client.no,但是这里显然有多个行具有相同的client.no。

client.no <- c(1:10)
num.policy <- 0
client_info <- data.frame(client.no, num.policy)
policy.no <- c(1:100)
set.seed(1)
policy_info <- data.frame(policy.no, client.no = sample(client.no, 100, replace=TRUE))

我想将有关策略的信息与客户信息一起传输到第一个数据框。如何计算每个客户端的策略数,然后将此数字传输到客户端信息数据框中的新变量?

我需要的是变量client_info$num_policy,以包含各个客户端拥有的策略数。我不在乎这个变量的时候(我只是在这里作为例子展示)

这不是我需要做的唯一任务,例如我还需要总结不同政策的价格,然后将其转移到client_info数据框。任何建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

使用aggregate按客户计算政策数量,然后merge将这些信息重新计入原始数据框:

> merge(client_info, aggregate(policy.no ~ client.no, data = policy_info, FUN=length))
   client.no num.policy policy.no
1          1          0         7
2          2          0         6
3          3          0        11
4          4          0        14
5          5          0        14
6          6          0         5
7          7          0        11
8          8          0        15
9          9          0        11
10        10          0         6

aggregate部分甚至可能就是您正在寻找的部分。您可以更改FUN参数以执行不同的操作(听起来您可能需要meansum来满足您的其他需求。)