2016-11-16 73 views
1

我有一个具有数字和字符串值,例如一个数据帧:dplyr总结通过串

mydf <- data.frame(id = c(1, 2, 1, 2, 3, 4), 
       value = c(32, 12, 43, 6, 50, 20), 
       text = c('A', 'B', 'A', 'B', 'C', 'D')) 

id变量的值总是对应于text变量,例如,id == 1永远是text == 'A'

现在,我想id来概括这个数据帧(或text,因为它是一回事):

mydf %>% 
    group_by(id) %>% 
    summarize(mean_value = mean(value)) 

这工作得很好,但我还需要text变量,因为我婉吨至做文本分析。

然而,当我添加text到dplyr管:

mydf %>% 
    group_by(id) %>% 
    summarize(mean_value = mean(value), 
    text = text) 

我收到以下错误:

Error: expecting a single value

由于textid是永远不变的,是有可能将其追加到汇总数据帧?

+4

尝试'GROUP_BY(ID文本)%>%综述(mean_value =平均(值))' – zx8754

+0

好吧,我虽然我想这一点,但显然我忘了。是的,这很好,非常感谢! – Zlo

回答

2

summarize功能需要申请上输入一些功能,所以我们可以保留text了出来,并内group_byid一起保存,或使用first函数内summarize

# text should be in group_by to show up in result 
mydf %>% 
    group_by(id, text) %>% 
    summarize(mean_value = mean(value)) 

# or within summarise use first function, to take the first value when grouped 
mydf %>% 
    group_by(id) %>% 
    summarize(mean_value = mean(value), 
      text = first(text)) 
0

而是总结,这会让你的df变成一个只有两列的数据框,使用mutate,这样你可以保留其他变量。

mydf %>% 
group_by(id) %>% 
mutate(mean_value = mean(value))