【问题标题】:how to transform data frame in r如何在r中转换数据框
【发布时间】:2015-08-31 21:34:14
【问题描述】:

我有一个数据框

newDF<-data.frame(type=c(rep("A",4),
                  rep("B",2),rep("C",3),
                  rep("D",4),rep("E",4)), 
                  cluster=sample(1:4,17,replace=T), 
                  count=sample(1:20, 17, rep=T), 
                  sum=sample(30:1000,17,rep=T))

而且我需要获取 2 个新数据框,它们将“簇”作为列,键入作为行并作为填充计数。(第二个表将是相同的,但填充 = 总和,而不是计数)。这2个表中肯定有一些NA,因为newDF有17行,但是两个新的数据框必须是5x5

如何创建这 2 个 5x5 数据框?

【问题讨论】:

  • 请显示预期输出
  • 我认为这不起作用,因为有重复的标识符你可能需要library(reshape2);dcast(newDF, type~cluster, value.var='sum', sum)

标签: r tidyr


【解决方案1】:

试试这个:

library(reshape2)
countoutput <- dcast(newDF,type~cluster,value.var = "count",fun.aggregate = sum)
sumoutput <- dcast(newDF,type~cluster,value.var = "sum",fun.aggregate = sum)

它用 0 填充缺失值,但您可以通过添加参数 fill = -1 来指定不同的数字(例如 -1),以帮助突出显示哪些缺失值...我似乎无法将其放入 NA而不是 0,但我已经尝试了很长时间。

【讨论】:

    【解决方案2】:

    对不起,我已经找到答案了

    spread(newDF[,-3],key=cluster, value=sum)
    

    【讨论】:

    • 根据您显示的数据,我得到Error: Duplicate identifiers for rows (8, 9), (12, 13), (1, 2, 3, 4), (16, 17)。可能是library(dplyr);newDF %&gt;% group_by(cluster) %&gt;% mutate(Seq=row_number()) %&gt;% select(-count) %&gt;% spread(key=cluster, value=sum)
    • 当然,我使用另一个数据,newDF 只是测试数据框。对于 newDF,我需要删除重复的行或使用 group_by 汇总它们
    • 发布示例时,需要模仿原始数据。解决方案因数据集而异
    猜你喜欢
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 2016-07-27
    相关资源
    最近更新 更多