1

var3別の変数 (下の例では ) の因子レベルの複数の値を持つデータ フレーム列 (下の例では ) を変更しようとしていnamesます。因子レベルが繰り返されないvar3ように、値ごとに1つずつ別々の列に分割したいと思います。names他の変数 ( var1, var2) は、 のスペースを確保するために必要な場所で繰り返されvar3ます。

これは私が持っている種類のデータです:

df1 <- structure(list(name = structure(c(2L, 4L, 4L, 4L, 3L, 5L, 5L, 
1L), .Label = c("fifth", "first", "fourth", "second", "third"
), class = "factor"), var1 = c(90L, 84L, 84L, 84L, 18L, 22L, 
22L, 36L), var2 = c(301L, 336L, 336L, 336L, 412L, 296L, 296L, 
357L), var3 = c(-0.582075925, -1.108889624, -1.014962009, -0.162309524, 
-0.282309524, 0.563055819, -0.232075925, -0.773353424)), .Names = c("name", 
"var1", "var2", "var3"), class = "data.frame", row.names = c(NA, -8L))

これは私が欲しいものです:

df2 <- structure(list(name = structure(c(2L, 4L, 3L, 5L, 1L), .Label = c("fifth", 
"first", "fourth", "second", "third"), class = "factor"), var1 = c(90L, 
84L, 18L, 22L, 36L), var2 = c(301L, 336L, 412L, 296L, 357L), 
var3 = c(-0.582075925, -1.108889624, -0.282309524, 0.563055819, 
-0.773353424), var3.2 = c(NA, -1.014962009, NA, -0.232075925, 
NA), var3.3 = c(NA, -0.162309524, NA, NA, NA)), .Names = c("name", "var1", 
"var2", "var3", "var3.2", "var3.3"), class = "data.frame", row.names = c(NA, -5L))

reshapeとを見てきましたがddply、この出力を得ることができません。

4

2 に答える 2

0

基本的な解決策は次のとおりです。

> df1$seqnam <- ave(as.character(df1$name), df1$name, FUN=seq)  # creates a "time" index 
> reshape(df1, direction="wide", timevar="seqnam",  idvar=c("name", "var1", "var2") )
    name var1 var2     var3.1     var3.2     var3.3
1  first   90  301 -0.5820759         NA         NA
2 second   84  336 -1.1088896 -1.0149620 -0.1623095
5 fourth   18  412 -0.2823095         NA         NA
6  third   22  296  0.5630558 -0.2320759         NA
8  fifth   36  357 -0.7733534         NA         NA
于 2012-09-17T00:29:07.440 に答える
0
ddply(df1, .(name), function(x) {
    var3 <- data.frame(rbind(unique(x$var3)))
    names(var3) <- paste0("var3.", 1:length(var3))
    return(data.frame(name = unique(x$name), var1 = unique(x$var1), 
    var2 = unique(x$var2), var3))
    })

 name var1 var2     var3.1     var3.2     var3.3
1  fifth   36  357 -0.7733534         NA         NA
2  first   90  301 -0.5820759         NA         NA
3 fourth   18  412 -0.2823095         NA         NA
4 second   84  336 -1.1088896 -1.0149620 -0.1623095
5  third   22  296  0.5630558 -0.2320759         NA

複数の値を含むことが予想var1される場合は、関数を変更できます。var2

于 2012-09-17T00:19:12.987 に答える