0

dcastfromを使用して、データ フレームをロングからワイドに変換しようとしていますreshape2

次のようなデータフレームを作成します。

> Person=c("A","A","A","A","B","B","C","C","C","C")
> Object=c("car", "watch", "bike", "phone","car","skateboard","car","bike","motorcycle")
> Value=c("1","1","1","1","1","1","1","1","1","1")
> df=data.frame(Person, Object, Value)

そして得る、

> df
   Person     Object Value
1       A        car     1
2       A      watch     1
3       A       bike     1
4       A      phone     1
5       B        car     1
6       B skateboard     1
7       C        car     1
8       C       bike     1
9       C motorcycle     1
10      C         TV     1

次に、dcastで

> library(reshape2)
> dcast(df, Person + Object, variable.var="Value", fun.aggregate=length)
Error in Person + Object : non-numeric argument to binary operator

とにかく dcast が Person および Object 列に数値引数を必要とするのはなぜですか?

私はこの出力を取得しようとしています:

Person    car    watch    bike    phone    skateboard    motorcycle    TV
     A      1        1       1        1             0             0     0
     B      1        0       0        0             1             0     0
     C      1        0       1        0             0             1     1

*編集* @neilfwsが解決策を見つけました:

dcast(df, Person ~ . + Object, variable.var="Value")

ただし、データ フレームがタブ区切りファイルからインポートされた場合:

df = read.table("Person_Object.tab", header=T, sep="\t")

同じ dcast コマンドは次を返します。

Error in eval(expr, envir, enclos) : object 'Person' not found
4

2 に答える 2