我有大型数据集,如下所示:
myd <- data.frame (var1 = c("A", "A", "B1-1", "B1-1", "C", "C", "D1", "D1"),
var2 = c(1, 2, 2, 2, 3, 1, 1, 4))
var1 var2
1 A 1
2 A 2
3 B1-1 2
4 B1-1 2
5 C 3
6 C 1
7 D1 1
8 D1 4
请注意,var1中的每个级别重复两次,并且在var2中有两个值。
对于var1的每个级别,我想创建一个新的数据集,其中var2值现在以行方式(短路)并组合成一个具有以下输出类型的列:
var1 var2.h1 var2.h2 h1.h2
1 A 1 2 12
2 B1-1 2 2 22
3 C 1 3 13
4 D1 1 4 14
答案 0 :(得分:1)
library(plyr)
ddply(myd, .(var1), function(x) {
foo <- data.frame(rbind(x$var2), sprintf("%s%s", x$var2[1], x$var2[2]))
names(foo) <- c("var2.h1", "var2.h2", "h1.h2")
foo
})
var1 var2.h1 var2.h2 h1.h2
1 A 1 2 12
2 B1-1 2 2 22
3 C 3 1 31
4 D1 1 4 14
答案 1 :(得分:1)
library("reshape2")
myd$pos <- c("h1", "h2")
myd.wide <- dcast(myd, var1~pos, value.var="var2")
names(myd.wide)[2:3] <- paste("var2", names(myd.wide)[2:3], sep=".")
myd.wide$h1.h2 <- paste0(myd.wide$var2.h1, myd.wide$var2.h2)
给出了
> myd.wide
var1 var2.h1 var2.h2 h1.h2
1 A 1 2 12
2 B1-1 2 2 22
3 C 3 1 31
4 D1 1 4 14