对数据进行分组,然后将值分配给存储在字符串中的变量名-R

对数据进行分组,然后将值分配给存储在字符串中的变量名-R,r,R,我正在尝试将此活动从excel/SQL迁移到R,我被卡住了-非常感谢您的帮助。谢谢 数据格式: 有唯一的客户ID。每个客户在不同的年份有不同的购买群体 目标: 对于每个客户id-获取一行输出。使用存储在列中的变量名并创建列-为每列分配金额总和。创建一个类似的列,并根据是否存在收入分配为1或0 资料来源: Cust_ID Group Year Variable_Name Amount 1 1 A 2009 A_2009 2000 2

我正在尝试将此活动从excel/SQL迁移到R,我被卡住了-非常感谢您的帮助。谢谢

数据格式: 有唯一的客户ID。每个客户在不同的年份有不同的购买群体

目标: 对于每个客户id-获取一行输出。使用存储在列中的变量名并创建列-为每列分配金额总和。创建一个类似的列,并根据是否存在收入分配为1或0

资料来源:

   Cust_ID Group Year Variable_Name   Amount
1        1     A 2009        A_2009     2000
2        1     B 2009        B_2009      100
3        2     B 2009        B_2009      300
4        2     C 2009        C_2009       20
5        3     D 2009        D_2009   299090
6        3     A 2011        A_2011 89778456
7        1     B 2011        B_2011      884
8        1     C 2010        C_2010    34894
9        3     D 2010        D_2010   389849
10       2     A 2013        A_2013      742
11       1     B 2013        B_2013    25661
12       2     C 2007        C_2007      393
13       3     D 2007        D_2007       23
输出:

Cust_ID A_2009  B_2009  C_2009  D_2009  A_2011  ….  A_2009_P    B_2009_P    
1   sum of amount       ..              1   0   ….
2                                   
3                                   
原始数据的dput:

structure(list(Cust_ID = c(1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 3L, 
2L, 1L, 2L, 3L), Group = c("A", "B", "B", "C", "D", "A", "B", 
"C", "D", "A", "B", "C", "D"), Year = c(2009L, 2009L, 2009L, 
2009L, 2009L, 2011L, 2011L, 2010L, 2010L, 2013L, 2013L, 2007L, 
2007L), Variable_Name = c("A_2009", "B_2009", "B_2009", "C_2009", 
"D_2009", "A_2011", "B_2011", "C_2010", "D_2010", "A_2013", "B_2013", 
"C_2007", "D_2007"), Amount = c(2000L, 100L, 300L, 20L, 299090L, 
89778456L, 884L, 34894L, 389849L, 742L, 25661L, 393L, 23L)), .Names = c("Cust_ID", 
"Group", "Year", "Variable_Name", "Amount"), class = "data.frame", row.names = c(NA, 
-13L))
一种选择:

intm <- as.data.frame.matrix(xtabs(Amount ~ Cust_ID + Variable_Name,data=dat))
result <- data.frame(aggregate(Amount~Cust_ID, data=dat,sum),intm,(intm > 0)+0 )
如果名称有问题,可以通过以下方式轻松修复:

names(res) <- gsub("\\.1","_P",names(res))

names(res)这一个似乎有效-但没有求和-所以可能需要在这个输出上执行ddply吗?我喜欢ddply,因为它在函数方面提供了很大的灵活性—诸如此类?@CuriousGeorge—一个
aggregate
应用程序解决了这个问题—请参阅编辑。
names(res) <- gsub("\\.1","_P",names(res))