我有一个包含数字和字符串值的数据框,例如:
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)
我收到以下错误:
错误:期待单个值
由于text
的{{1}}始终相同,是否可以将其附加到汇总数据框?
答案 0 :(得分:3)
summarize
函数需要在输入中应用某些函数,因此我们可以将text
保留在id
之外并与group_by
中的first
保持一致,或者使用{{ 1}} 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))
答案 1 :(得分:0)
而不是汇总,这会使你的df成为只有两列的数据框,而是使用mutate以便你可以保留其他变量。
mydf %>%
group_by(id) %>%
mutate(mean_value = mean(value))