如何将数据X转换为Y,如
X = data.frame(
ID = c(1,1,1,2,2),
NAME = c("MIKE","MIKE","MIKE","LUCY","LUCY"),
SEX = c("MALE","MALE","MALE","FEMALE","FEMALE"),
TEST = c(1,2,3,1,2),
SCORE = c(70,80,90,65,75)
)
Y = data.frame(
ID = c(1,2),
NAME = c("MIKE","LUCY"),
SEX = c("MALE","FEMALE"),
TEST_1 =c(70,65),
TEST_2 =c(80,75),
TEST_3 =c(90,NA)
)dcast函数在reshape2中似乎有效,但在上面的示例中,它不能包括数据中的其他列,如ID、名称和性别。
假设ID列中的所有其他列都是一致的,比如Mike只能是ID 1的男性,那么我们怎么做呢?
发布于 2017-04-13 15:46:33
根据文档(?reshape2::dcast),dcast()允许在公式中使用...:
"...“表示公式中未使用的所有其他变量.
这对于reshape2和data.table包都是正确的,它们都支持dcast()。
所以,你可以写:
reshape2::dcast(X, ... ~ TEST, value.var = "SCORE")
# ID NAME SEX 1 2 3
#1 1 MIKE MALE 70 80 90
#2 2 LUCY FEMALE 65 75 NA但是,如果OP坚持列名应该是TEST_1、TEST_2等,则需要在重塑之前修改TEST列。在这里,使用data.table:
library(data.table)
dcast(setDT(X)[, TEST := paste0("TEST_", TEST)], ... ~ TEST, value.var = "SCORE")
# ID NAME SEX TEST_1 TEST_2 TEST_3
#1: 1 MIKE MALE 70 80 90
#2: 2 LUCY FEMALE 65 75 NA这与data.frame Y所期望的答案是一致的。
https://stackoverflow.com/questions/40397290
复制相似问题