R 绘制除一个变量外所有变量的总和
我有一个数据框,其中包含三个不同国家(加拿大、墨西哥、美国)调查对象在两个不同时间点(现在和以前)拥有的电视和收音机数量的数据: 然而,变化R 绘制除一个变量外所有变量的总和,r,ggplot2,tidyr,R,Ggplot2,Tidyr,我有一个数据框,其中包含三个不同国家(加拿大、墨西哥、美国)调查对象在两个不同时间点(现在和以前)拥有的电视和收音机数量的数据: 然而,变化 DF %>% mutate_all(funs(sum), na.rm = TRUE) %>% gather(key=Device, value=Number, -Country) %>% ggplot(aes(x=Device,fill=Device)) + geom_bar(aes(x = Device, y = Num
DF %>% mutate_all(funs(sum), na.rm = TRUE) %>%
gather(key=Device, value=Number, -Country) %>%
ggplot(aes(x=Device,fill=Device)) +
geom_bar(aes(x = Device, y = Number), position = "dodge", stat = "identity") +
facet_wrap(~Country)
导致错误的原因:
Error in mutate_impl(.data, dots) :
Evaluation error: ‘sum’ not meaningful for factors.
有没有一种方法可以从
sum
中排除该因子,或者用另一种方法生成预期的绘图?您可以使用summary函数对不同的列进行汇总。下面我使用dplyr的summary\u if()
函数对数值列进行了汇总
DF <- data.frame(TV_now = as.numeric(c(4, 9, 1, 0, 4, NA)),
TV_before = as.numeric(c(4, 1, 2, 4, 5, 2)),
Radio_now = as.numeric(c(4, 5, 1, 5, 6, 9)),
Radio_before = as.numeric(c(6, 5, 3, 6, 7, 10)),
Country = as.factor(c("Mexico", "Canada", "US", "US", "Canada", "US")))
DF %>%
group_by(Country) %>%
summarise_if(is.numeric,sum,na.rm=TRUE) %>%
gather(key=Device, value=Number, -Country) %>%
ggplot(aes(x=Device,fill=Device)) +
geom_bar(aes(x = Device, y = Number),position = "dodge", stat = "identity") +
facet_wrap(~Country)
DF%
按(国家)划分的组别%>%
如果(是数字,求和,na.rm=TRUE)%>%,则汇总
聚集(键=设备,值=数字,-国家)%>%
ggplot(aes(x=设备,fill=设备))+
几何图形条(aes(x=设备,y=编号),position=“dodge”,stat=“identity”)+
面_包装(~国家)
结果是:
这太完美了。正是我想要的。
Error in mutate_impl(.data, dots) :
Evaluation error: ‘sum’ not meaningful for factors.
DF <- data.frame(TV_now = as.numeric(c(4, 9, 1, 0, 4, NA)),
TV_before = as.numeric(c(4, 1, 2, 4, 5, 2)),
Radio_now = as.numeric(c(4, 5, 1, 5, 6, 9)),
Radio_before = as.numeric(c(6, 5, 3, 6, 7, 10)),
Country = as.factor(c("Mexico", "Canada", "US", "US", "Canada", "US")))
DF %>%
group_by(Country) %>%
summarise_if(is.numeric,sum,na.rm=TRUE) %>%
gather(key=Device, value=Number, -Country) %>%
ggplot(aes(x=Device,fill=Device)) +
geom_bar(aes(x = Device, y = Number),position = "dodge", stat = "identity") +
facet_wrap(~Country)