Summarise_each和dplyr语法

时间:2017-07-12 22:58:19

标签: r dplyr summarize

我收到了一组特别混乱的数据。在其中有三列表示相同的因子变量 - focus1,focus2和focus3,其中每个数据观察可能包含多个焦点但它们不是幅度的度量,即焦点1中给出的焦点不一定是更强的焦点而不是焦点2。我需要将这三个变量扩展为合并焦点变量的每个可能级别的指标变量。要做到这一点,我使用下面的代码,它昨天在我的电脑上完美运行,但我在办公室的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)

我遇到了两个问题:

  1. summarise_each似乎在Mac上已经过时而不是Windows?这里的答案似乎是使用summarise_at。我可以使用相同的x:y表示法来表示要汇总的列吗?这很重要,因为在第一个和最后一个索引之间有大约20-30列。
  2. 由于某种原因,R不再识别我在管道符号中引用的列名。我收到错误“错误在eval_bare(点$ expr,点$ env):对象'艺术'未找到”。
  3. 我也很好奇,是什么导致在Windows和Mac上运行之间存在这些差异?我不得不想象它是不同版本的软件包/ RStudio本身,但它创造了一个相当大的难题。

1 个答案:

答案 0 :(得分:0)

在使用summarize_at进行一些修改之后,我找到了解决方案:

focusvars <- spr.focus %>%
  group_by(tid) %>% # tid is an id var
  summarise_at(vars(Arts:Unclear),funs(sum)) 

由于某种原因,它仍会在边距中抛出错误,但在范围内找不到合并名,但它会创建新的数据框。如果这对其他人有帮助,我会把它留下来。