在对非数值列执行其他操作时,希望对数据帧或tibble的数值列进行汇总的情况并不少见。
有个很好的办法
here
,但对于字符列似乎失败了。
首先,它在这里工作,返回数值列的平均值和其他列的第一行的值
set.seed(1234)
category <- (c('A','A','E','E','B','B','C'))
date <- seq(as.Date("2017-01-01"), by = "month", length.out = 7)
value1 <- sample(seq(from = 91, to = 97, by = 1))
dt <- data.frame(category, date, value1)
dt<- as_tibble(dt)
#works
dt2<- dt %>%
group_by(category) %>%
summarise_all(funs(if_else(is.numeric(.), mean(.), last(.))))
print(dt2)
# A tibble: 4 x 3
category date value1
<fct> <date> <dbl>
1 A 2017-02-01 92.5
2 B 2017-06-01 93.5
3 C 2017-07-01 97
4 E 2017-04-01 94.5
但是,当其中一个列是chr时失败
marsupial <-c("quoll","phascogale",'triok','opossum','antechinus','bandicoot','Fat-tailed dunnart')
dt$marsupial <- marsupial
dt3<- dt %>% #doesn't work
group_by(category) %>%
summarise_all(funs(if_else(is.numeric(.), mean(.), last(.))))
print(dt3)
给出这些错误:
Error in summarise_impl(.data, dots) :
Evaluation error: `false` must be type double, not character.
In addition: Warning message:
In mean.default(marsupial) :
argument is not numeric or logical: returning NA
'false' must be type double
指试图评估的有袋柱
last