我想重塑以下数据框
x <- structure(
list(name = c("HT", "AT", "HG", "AG"),
conv = c(2L, + 2L, 3L, 4L)),
.Names = c("name", "conv"), row.names = 1:4, class = "data.frame")
> x
name conv
1 HT 2
2 AT 2
3 HG 3
4 AG 4
到
conv x.1 x.2
1 2 HT AT
2 3 HG NA
3 4 AG NA
在最终数据框中,每个不同的值都应该有一行
conv
以及与原始数据中的行一样多的x.?
列
conv
特定值的框架,必要时填充NA。我不关心列名。
我尝试了reshape
,但我无法让它发挥作用,因为它似乎需要它
我没有的第三栏:
> reshape(x, idvar='conv', direction='wide')
Error in `[.data.frame`(data, , timevar) : undefined columns selected
答案 0 :(得分:3)
使用data.table v1.9.5
:
require(data.table)
dcast(setDT(x), conv ~ paste0("x.", x[, seq_len(.N), by=conv]$V1), value.var="name")
# conv x.1 x.2
# 1: 2 HT AT
# 2: 3 HG NA
# 3: 4 AG NA
您可以按照here说明进行安装。
答案 1 :(得分:2)
你可以试试的东西:
xmax <- max(table(x$conv))
xsplit <- split(x, x$conv)
xsplit <- sapply(xsplit, function(tab){c(tab$name, rep(NA, xmax-length(tab$name)))})
x2 <- data.frame(conv=x$conv[!duplicated(x$conv)], t(xsplit), stringsAsFactors=F)
colnames(x2)[-1]<-paste("x",1:xmax,sep=".")
x2
# conv x.1 x.2
#2 2 HT AT
#3 3 HG <NA>
#4 4 AG <NA>
NB :通过重塑,你可以做下面的事情,但我不认为这是你想要的。可能会设置一些参数,以便您得到您想要的但我真的不是reshape
专家: - (
reshape(data=x, v.names="name", timevar="name", idvar="conv", direction="wide")
# conv name.HT name.AT name.HG name.AG
#1 2 HT AT <NA> <NA>
#3 3 <NA> <NA> HG <NA>
#4 4 <NA> <NA> <NA> AG