【发布时间】:2017-07-12 22:58:18
【问题描述】:
我收到了一组特别混乱的数据。其中有三列表示相同的因子变量 - focus1、focus2 和 focus3,其中对数据的每个观察都可能包含多个焦点,但它们不是大小的度量,即 focus1 中给出的焦点不一定是更强的焦点比focus2。我需要将这三个变量扩展为针对合并焦点变量的每个可能级别的指标变量。为此,我使用了下面的代码,昨天它在我的 PC 上运行良好,但我在办公室的 Mac 上工作,现在遇到了问题。
# Create focus variables
spr.focus<- y1 %>%
gather(foc_num, focus, starts_with("focus")) %>%
mutate(present = 1) %>%
spread(focus, present, fill = 0)
# Reorder data on ID var while removing unnecessary columns
spr.focus <- spr.focus[order(spr.focus$tid), -c(34, 54)]
# Group by ID var and summarise indicator variables to get one obs per ID
focusvars <- spr.focus %>%
group_by(tid) %>% # tid is id var
summarise_each(funs(sum), Arts:Unclear)
我遇到了两个问题:
- summarise_each 似乎已在 Mac 而不是 Windows 上过时?这里的答案似乎是使用 summarise_at。我可以使用相同的 x:y 符号来表示要汇总的列吗?这很重要,因为第一个索引和最后一个索引之间大约有 20-30 列。
- 由于某种原因,R 不再识别我在管道符号中引用的列名。我收到一个错误“eval_bare(dot$expr, dot$env) 中的错误:找不到对象 'Arts'”。
我也很好奇,是什么导致了在 Windows 和 Mac 上操作之间的这些差异?我不得不想象它是不同版本的包/RStudio 本身,但它正在创造一个相当大的难题。
【问题讨论】:
-
可能是两台电脑上的dplyr版本不同。在任何情况下,如果您想选择要汇总的特定列,您可以使用
summarise_at(并使用与select相同的方法选择要汇总的列),或者如果您要汇总所有非分组列。或者,您可以在传播之前(或不传播)进行总结,例如,y1 %>% gather(foc_num, focus, starts_with("focus")) %>% group_by(tid, focus) %>% summarise(n = n(), sum=sum(focus)) -
@eipi10 您的汇总语句的 n = n() 部分是什么?该代码本身引发了错误。我认为 mutate 语句是整个过程的关键部分,因为它创建了可以总结的数字。焦点变量是描述焦点的字符向量。
-
n()只是dplyr中的一个方便函数,用于计算每个组中的行数。我假设 focus1、focus2 等是您想要为每个组求和的值。我也加入了行数,只是为了说明。您只是想计算观察次数吗?您可以使用n()、tally或基本 R 函数length来做到这一点。如果您包含数据样本(粘贴到dput(data_sample)的输出中。 -
不,我正在尝试为焦点变量的每个可能类别创建指标变量。问题是焦点变量被分成 3 个单独的变量。感谢您的帮助,但实际上我已经用上面编辑中的代码解决了这个问题!谢谢
-
请将解决方案作为答案发布,而不是作为问题的更新。这是为了避免混淆。谢谢。