Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 值为文本的dcast_R_Tidyr - Fatal编程技术网

R 值为文本的dcast

R 值为文本的dcast,r,tidyr,R,Tidyr,我希望传播或dcast一个data.frame,其中的值是文本字符串 df = data.frame(employeeid = c(1,1,2,2), question=c('do you like milk?', 'do you like apples?', 'do you like milk?', 'do you like apples?'), Answer=c('Yes','No','No','No')) 我希望将其转换为广

我希望传播或dcast一个data.frame,其中的值是文本字符串

df = data.frame(employeeid = c(1,1,2,2),
                question=c('do you like milk?', 'do you like apples?', 'do you like milk?', 'do you like apples?'),
                Answer=c('Yes','No','No','No'))

我希望将其转换为广泛的格式,其中列标题是员工id和问题。我试过
df=spread(df,问题,答案)
,但似乎不行

因为你的标题中有
dcast
,我假设
数据。表

data.table::dcast(问题~employeeid,数据=df,value.var=“答案”)
#问题1 2
#你喜欢苹果吗?不不
#你喜欢牛奶吗?是不是
但另一种选择是:

tidyr::spread(df,employeeid,Answer)
#问题1 2
#你喜欢苹果吗?不不
#你喜欢牛奶吗?是不是
编辑:由于数据中似乎存在重复项,您可以使用以下选项找到“最常见”的答案:


大多数情况下,我使用了dcast函数,但我收到一条消息,说聚合函数缺失,它默认为长度,这是不正确的。我不知道该说什么。。。你的数据和这个函数对我有用。这是用
数据演示的。表1.12.0
tidyr-0.8.2
在R-3.5.3上。好的,这很可能是因为您有重复的id/问题对。当这种情况发生时,即使您声明
value.var=“Answer”
,它也会给出数据透视组的长度。如果这是一个已知条件,请定义一个函数,该函数始终返回第一个或最频繁的元素,但要意识到您将“丢失数据”。另一个选项是先消除重复数据:
df[!duplicated(cbind(df$employeeid,df$question)),]
。啊,这很有意义。我添加了aggregate.fun=min,这样就行了。似乎不行,怎么办?您希望列名同时为ID和question吗?还是缺少一个词?@camille,在我的回答的评论中说:有重复,所以
dcast
使用警告没有明确的
fun\u聚合
,并使用
长度
,结果是数字输出,而不是所需的字符串。(我同意这个问题应该包括这个花边。)