2017-04-21 13 views
0

dcastからreshape2を使用して、データフレームを長いものから広いものに変換しようとしています。 dcastはPersonとオブジェクトの数値の引数が必要になるのはなぜdcastreshape2二項演算子に数値以外の引数を使用する

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

で、その後

> 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(df, Person ~ . + Object, variable.var="Value") 

、データフレームはタブ区切りから輸入されています* EDIT * @neilfwsが解決策を見つけた

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 

区切られたファイル:

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

sa私はキャストコマンドを返します:

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

を使用することができますあなたはそれ以外のRは、あなたが2つの数値を追加しようとしていると考えて、 '〜'を含む、式を指定する必要があります。おそらく 'Person + Object〜.'ですか? – neilfws

+1

@neilfws:ありがとう! 'dcast(df、Person〜。+ Object、variable.var =" Value ")'のようなものです。 – user31888

+0

ファイルから同じデータフレームをインポートすると、別のエラーが返されます(上記の編集を参照してください) – user31888

答えて

0

空のセルを埋める方法を表示します。

Person=c("A","A","A","A","B","B","C","C","C","C") 
Object=c("car", "watch", "bike", "phone","car","skateboard","car","bike","motorcycle", "TV") 
Value=c("1","1","1","1","1","1","1","1","1","1") 

# note the extra parameter StringsAsFactors - needed so that "0" can be used 
df=data.frame(Person, Object, Value, stringsAsFactors = FALSE) 

library(reshape2) 
dcast(df, Person ~ Object, value.var="Value", fill = "0") 

# Person bike car motorcycle phone skateboard TV watch 
# 1  A 1 1   0  1   0 0  1 
# 2  B 0 1   0  0   1 0  0 
# 3  C 1 1   1  0   0 1  0 
> 
+0

素晴らしい! 'stringsAsfactors = FALSE'はファイルのインポートに関する問題を解決しました(edit参照)。ありがとう! – user31888

0

我々はtidyverse

library(tidyr) 
df %>% 
    spread(Object, Value, fill = 0) 
# Person bike car motorcycle phone skateboard TV watch 
#1  A 1 1   0  1   0 0  1 
#2  B 0 1   0  0   1 0  0 
#3  C 1 1   1  0   0 1  0 
関連する問題