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