4

バイナリ応答を持ち、キャストを使用している要因のリストを作成しようとしています。

DF2 <- cast(data.frame(DM), id ~ region)
names(DF2)[-1] <- paste("region", names(DF2)[-1], sep = "")

私が得ている問題は、応答が答えが出てくる頻度であり、それが一致するかどうかだけを探しているということです。

たとえば、私は持っています:

id region
 1   2
 1   3
 2   2
 3   1
 3   1

私が欲しいのは:

id region1 region2 region3
1   0          1     1
2   0          1     0
3   1          0     0
4

4 に答える 4

8

私はreshape2dcastからちょっと好きです:

library(reshape2)
dat <- read.table(text = "id region
 1   2
 1   3
 2   2
 3   1
 3   1",header = TRUE,sep = "")

dcast(dat,id~region,fun.aggregate = function(x){as.integer(length(x) > 0)})

  id 1 2 3
1  1 0 1 1
2  2 0 1 0
3  3 1 0 0

それを行うためのよりスムーズな方法があるかもしれませんが、私は正直に言って、それほど頻繁にものをキャストすることはありません。

于 2012-07-25T21:59:53.020 に答える
5

元のデータ:

x <- data.frame(id=c(1,1,2,3,3), region=factor(c(2,3,2,1,1)))

> x
  id region
1  1      2
2  1      3
3  2      2
4  3      1
5  3      1

データをグループ化します。

aggregate(model.matrix(~ region - 1, data=x), x["id"], max)

結果:

  id region1 region2 region3
1  1       0       1       1
2  2       0       1       0
3  3       1       0       0
于 2012-07-25T22:29:34.873 に答える
4

tableこれは、 (角かっこが重要です)を使用して1行でそれを行う一種の「トリッキーな」方法です。data.frameあなたの名前が付けられていると仮定しますdf

(table(df) > 0)+0
#    region
# id  1 2 3
#   1 0 1 1
#   2 0 1 0
#   3 1 0 0

table(df) > 0私たちに与えTRUEFALSE; 追加すると、とが数値に+0変換されます。TRUEFALSE

于 2012-07-26T03:23:24.117 に答える
1

特別な機能は必要ありません:

x <- data.frame(id=1:4, region=factor(c(3,2,1,2)))
x
   id region
1  1      3
2  2      2
3  3      1
4  4      2

x.bin <- data.frame(x$id, sapply(levels(x$region), `==`, x$region))
names(x.bin) <- c("id", paste("region", levels(x$region),sep=''))
x.bin

  id region1 region2 region3
1  1   FALSE   FALSE    TRUE
2  2   FALSE    TRUE   FALSE
3  3    TRUE   FALSE   FALSE
4  4   FALSE    TRUE   FALSE

または整数の結果の場合:

x.bin2 <- data.frame(x$id,  
    apply(sapply(levels(x$region), `==`, x$region),2,as.integer)
) 
names(x.bin2) <- c("id", paste("region", levels(x$region),sep=''))
x.bin2


  id region1 region2 region3
1  1       0       0       1
2  2       0       1       0
3  3       1       0       0
4  4       0       1       0
于 2012-07-25T22:16:19.153 に答える