【问题标题】:How do I add columns of group counts in r?如何在 r 中添加组计数列?
【发布时间】:2013-05-31 02:39:52
【问题描述】:

我有一个数据框,其中每个 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

【问题讨论】:

    标签: r


    【解决方案1】:

    根据您的编辑,您可能只是在寻找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
    

    请注意,第一个“列”是“行名”,而不是实际列。


    其他选项包括使用unclassdata.frameas.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
    

    【讨论】:

    • 不错。我用各种 as.XXX 搞砸了,但不知道 as.data.frame.matrix。 +1
    • 我也不知道将 .matrix 放在最后;希望我在 4 小时前问过这个!谢谢!
    • @TylerRinker,原来unclass 也适用于这个问题。
    猜你喜欢
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    • 2019-09-20
    相关资源
    最近更新 更多