我一直在努力解决这些问题,但是有没有办法在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 ║
╚══════════════════════════╝
*此示例未子集化。
非常感谢你, 罗德里戈·几内亚
答案 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)