dcast
fromを使用して、データ フレームをロングからワイドに変換しようとしています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