随着data.table,该解决方案将工作:
library(data.table); library(rebus);
#generate your table
data <- data.table(a = 1:50, rowid = rep(1:50, each=50), x =round(runif(500)), y =round(runif(500)))
data
data <- dcast(data, rowid~a, value.var = c("x", "y"))
### solution
# meltdata
meltdata <- melt(data, id.vars="rowid")
# extract column names
meltdata$part <- str_match(meltdata$variable, pattern = capture(ANY_CHAR) %R% "_" %R% capture(one_or_more(DGT)))[, 2]
meltdata$number <- str_match(meltdata$variable, pattern = capture(ANY_CHAR) %R% "_" %R% capture(one_or_more(DGT)))[, 3]
# seperate x and y tables
xvalue <- meltdata[part == "x", .(rowid, number, xvalue = value)]
yvalue <- meltdata[part == "y", .(rowid, number, yvalue = value)]
#merge x and y tables
mergeddata <- merge(xvalue, yvalue, by=c("rowid", "number"))
由于您没有共享您的数据,因此还有额外的工作,但我认为它运行良好。
来源
2017-05-24 13:50:32
Sab
您好,欢迎来到SO。请看看如何做一个[可重现的例子](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – Sotos
最终'y [x == “01”]' – jogo