我想从reshape2
使用dcast
将数据帧从long转换为wide。reshape2 dcast非二进制运算符的非数字参数
我创建这样一个数据帧:
> 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 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")
the sa我dcast命令返回:
Error in eval(expr, envir, enclos) : object 'Person' not found
你需要指定一个公式,包含'〜',否则,[R认为你试图把两个数相加。也许'个人+对象〜.'? – neilfws
@neilfws:谢谢! 'dcast(df,Person〜。+ Object,variable.var =“Value”)'种类的作品。 – user31888
但是从文件导入相同的数据帧会返回不同的错误(请参阅上面的编辑) – user31888