有没有一种方法可以创建没有汇总值的子集数据透视表?

时间:2018-08-08 19:47:31

标签: r pivot-table reshape2

我一直在努力解决这些问题,但是有没有办法在R中解决这个问题?

Source Table 
╔═══════════╦══════╦═══════╗
║ TEST_NAME ║ SBNO ║  VAL  ║
╠═══════════╬══════╬═══════╣
║ Test1     ║    1 ║ 0.304 ║
║ Test1     ║    2 ║ 0.31  ║
║ Test1     ║    3 ║ 0.306 ║
║ Test2     ║    1 ║ 2.3   ║
║ Test2     ║    2 ║ 2.5   ║
║ Test2     ║    3 ║ 2.4   ║
║ Test3     ║    1 ║ PASS  ║
║ Test3     ║    2 ║ PASS  ║
╚═══════════╩══════╩═══════╝


Desired Output 
╔══════════════════════════╗
║ SBNO Test1 Test2   Test3 ║
╠══════════════════════════╣
║ 1    0.304  2.3    PASS  ║
║ 2    0.31   2.5    PASS  ║
║ 3    0.306  2.4    NULL  ║
╚══════════════════════════╝

*此示例未子集化。

非常感谢你, 罗德里戈·几内亚

2 个答案:

答案 0 :(得分:1)

请考虑您的data.frame为df,我们可以使用spread

> library(tidyr)
> df %>% spread(TEST_NAME, VAL)
  SBNO Test1 Test2 Test3
1    1 0.304   2.3  PASS
2    2  0.31   2.5  PASS
3    3 0.306   2.4  <NA>

答案 1 :(得分:0)

看起来像@JilberUrbina击败了我,但这是一个基本相同的工作示例:

df <- data.frame(
    name = paste0("test", c(1,1,1,2,2,2,3,3)),
    sbno = rep(1:3, 3)[1:8],
    val  = c(0.304, 0.31, 0.306, 2.3, 2.5, 2.4, "pass", "pass"),
    stringsAsFactors = FALSE
)

tidyr::spread(df, key="name", value="val", convert=TRUE)