3

次のようなデータフレームがあります。

category fan_id likes
A     10702397  1
B     10702397  4
A     35003154  1
B     35003154  1
C     35003154  2 

次のデータフレームに変換したい

fan_id   A B C
10702397 1 4 0
35003154 1 1 2

私が考えることができる唯一の方法は、データ フレームをループして別のフレームを手動で構築することですが、もっと良い方法が必要なようです。

ここで尋ねられたのとは逆にしたいようですデータフレームで列を行に切り替える

4

4 に答える 4

4

ベースreshape関数メソッド:

dat <- data.frame(
       category=c("A","B","A","B","C"),
       fan_id=c(10702397,10702397,35003154,35003154,35003154),
       likes=c(1,4,1,1,2)
                 )
result <- reshape(dat,idvar="fan_id",timevar="category",direction="wide")
names(result)[2:4] <- gsub("^.*\\.","",names(result)[2:4])
result

    fan_id A B  C
1 10702397 1 4 NA
3 35003154 1 1  2

ボーナスxtabs方法:

result2 <- as.data.frame.matrix(xtabs(likes ~ fan_id + category, data=dat))

         A B C
10702397 1 4 0
35003154 1 1 2

修正を加えた正確な形式:

data.frame(fan_id=rownames(result2),result2,row.names=NULL)

    fan_id A B C
1 10702397 1 4 0
2 35003154 1 1 2
于 2013-06-04T22:37:38.557 に答える
3
> library(reshape2)
> dat <- data.frame(category=c("A","B","A","B","C"),fan_id=c(10702397,10702397,35003154,35003154,35003154),likes=c(1,4,1,1,2))
> dcast(dat,fan_id~category,fill=0)
Using likes as value column: use value.var to override.
    fan_id A B C
1 10702397 1 4 0
2 35003154 1 1 2
于 2013-06-04T21:56:48.653 に答える