【发布时间】:2020-02-12 21:53:07
【问题描述】:
我有以下数据框:
library(tidyverse)
datasetmax <- data.frame(pearl = c('new','new','recurrent','recurrent','new'),
jam = c(10,20,30,40,50),
dog = c(1,2,3,1,2),
stringsAsFactors = FALSE)
我将数据框分组为一个摘要:
datasetmax %>%
mutate(temple = ifelse(pearl == 'new', jam * 0.1, jam * 0.2)) %>%
group_by(pearl) %>% summarise(plus = sum(temple), weight = sum(jam*dog)/sum(dog))
我想要列权重的总和(两个值),应该是62.5
我尝试了以下代码:
datasetmax %>%
mutate(temple = ifelse(pearl == 'new', jam * 0.1, jam * 0.2)) %>%
group_by(pearl) %>% summarise(plus = sum(temple), weight = sum(jam*dog)/sum(dog)) %>% colSums(plus)
但它告诉我“加号”列不存在。为什么?你能帮我一把吗?谢谢。
【问题讨论】:
-
您将 tidyverse 的非标准评估(即仅引用裸变量名)与基本 R 函数
colSums混合在一起。但请注意,colSums是对单列求和的奇怪选择。 -
我会做 %>% summarise_if(is.numeric,sum) ... 而不是 %>% colSums(..)
-
你好@DarrenTsai,谢谢你的回答,工作正常。
-
您好@StupidWolf,为了解决您的想法,我尝试了
summarise_if(is.numeric,sum) %>% pull(plus),并给了我所需的价值。谢谢。 -
组合起来没问题,但是功能不一样。
dplyr像verb(data, variable)一样工作,而 base 通常像function(data$variable)一样工作。你试图做第一种方式,但你需要第二种方式。在这种特殊情况下,您只需执行datasetmax %>% mutate(.....) %>% pull(temple) %>% sum()。