我有一个数据框,其中每个id都可以重复,每行都是一个事务,每个事务都列出了成本和大小。我想创建一个数据框,其中行是每个购买者的名称,行名称是成本,值是每个名称产生每个成本的次数。我可以将它作为一个表格,但是无法准确地将该表格转换为数据帧。我已经完成了其他程序中的崩溃,但似乎无法在r中完成它。代码如下:
test.base <- data.frame(
names=c("A", "B", "C", "C", "B", "C"),
size =c(1, 2, 3, 4, 5, 6))
test.match<- data.frame(
names=c("A", "B", "C"),
cost =c(7, 8, 9))
test.merge<- merge(test.base, test.match)
#How do I make a new vriable in test-match that is the number of times
#the cost shows up in each variable to be three new columns ("7", "8", "9")?
table(test.merge$names, test.merge$cost)
或者我需要崩溃吗?
编辑: 我喜欢以下输出,但作为data.frame
7 8 9
A 1 0 0
B 0 2 0
C 0 0 3
答案 0 :(得分:4)
根据您的修改,也许您只是在寻找as.data.frame.matrix
:
> as.data.frame.matrix(table(test.merge$names, test.merge$cost))
7 8 9
A 1 0 0
B 0 2 0
C 0 0 3
请注意,第一个“列”是“rownames”,而不是实际列。
其他选项包括使用unclass
和data.frame
或as.data.frame
。前者将在必要时通过在名称前添加“X”并将空格转换为点等来创建语法上有效的名称,以此类推:
> data.frame(unclass(table(test.merge$names, test.merge$cost)))
X7 X8 X9
A 1 0 0
B 0 2 0
C 0 0 3
> as.data.frame(unclass(table(test.merge$names, test.merge$cost)))
7 8 9
A 1 0 0
B 0 2 0
C 0 0 3