2

私は次のようにRにデータセットを持っています

ID  Variable1  Variable2 Choice
1   1          2         1
1   2          1         0
2   2          1         1
2   2          1         1

以下のように出力テーブルを取得する必要があります

Id Variable1-1 Variable1-2 Variable2-1 Variable2-2
1  1           0           0           1
2  0           2           2           0

選択肢が1の場合、これらの行のみがカウントされることに注意してください(選択肢はバイナリ変数ですが、他の変数には整数値があります)。目的は、変数の列をそのレベルと同じ数にすることです。

Rでこれを行う方法はありますか?

4

2 に答える 2

2

あなたが何を求めているのかを理解するのにしばらく時間がかかりましたが、私はそれを理解しました(私は思う). 私はあなたが求めたことをしましたが、せいぜい複雑です。これは、他の人があなたが何を求めているかを理解するのに役立ち、より良い答えが得られると思います.

dat <- read.table(text="ID  Variable1  Variable2 Choice
1   1          2         1
1   2          1         0
2   2          1         1
2   2          1         1", header=T)


A <- split(dat$Choice, list(dat$Variable1, dat$ID))
B <- split(dat$Choice, list(dat$Variable2, dat$ID))
C <- list(A, B)

FUN <- function(x) sapply(x, function(y) sum(y))

FUN2 <- function(x){
    len <- length(x)/2
    rbind(x[1:len], x[(len+1):length(x)])
}

dat2 <- do.call('data.frame', lapply(lapply(C, FUN), FUN2))
colnames(dat2) <- c('Variable1-1', 'Variable1-2', 'Variable2-1', 
    'Variable2-2')
dat2

これは、あなたが祖母の分割表ではないことは確かです. おそらく、これらすべてを達成するためのはるかに優れた方法がありreshapeます。

于 2012-05-15T13:44:02.087 に答える
2

パッケージから次のようmeltに使用できます。dcastreshape2

mydf<-read.table(text="ID  Variable1  Variable2 Choice
1   1          2         1
1   2          1         0
2   2          1         1
2   2          1         1",header=TRUE)

library(reshape2)

最初にdata.frameを溶かし、行のみを選択して列をChoice == 1削除しますChoice

mydfM <- melt(mydf[mydf$Choice %in% 1, -match("Choice", names(mydf))], id = "ID")

# EDIT above: As @TylerRinker points out, using which could be avoided.
# I've replaced it with %in%

#   ID  variable value
# 1  1 Variable1     1
# 2  2 Variable1     2
# 3  2 Variable1     2
# 4  1 Variable2     2
# 5  2 Variable2     1
# 6  2 Variable2     1

length次に、集約関数として使用して、溶けたdata.frameをキャストします

(mydfC <- dcast(mydfM, ID ~ variable + value, fun.aggregate = length))

#   ID Variable1_1 Variable1_2 Variable2_1 Variable2_2
# 1  1           1           0           0           1
# 2  2           0           2           2           0
于 2012-05-15T13:44:24.380 に答える