【发布时间】:2018-11-12 01:03:30
【问题描述】:
我有一个数据框,其中包含调查对象现在和以前拥有的电视和收音机数量的数据:
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)))
我想对每个变量的总值求和,然后创建一个条形图,显示调查对象现在和以前拥有的电视和收音机的数量。
我可以手动创建一个新数据框,其中仅包含原始 DF 中每个变量的值的总和
DFsum <- data.frame(TV_now = as.numeric(c(sum(DF$TV_now,na.rm = TRUE))),
TV_before = as.numeric(c(sum(DF$TV_before,na.rm = TRUE))),
Radio_now = as.numeric(c(sum(DF$TV_now,na.rm = TRUE))),
Radio_before = as.numeric(c(sum(DF$Radio_before,na.rm = TRUE))))
然后使用tidyr 执行以下操作:
library(tidyr)
library(ggplot2)
DFsum %>%
gather(key=Device, value=Number) %>%
ggplot(aes(x=Number,fill=Device)) +
geom_bar(aes(x = Device, y = Number), position = "dodge", stat = "identity")
这给了我想要的结果,但是对于应该容易实现的东西来说似乎不必要地复杂。有没有更简单的方法来绘制这个?
【问题讨论】:
-
像
c(4, 9, 1, 0, 4, NA)这样的向量是数字,你不必在它们上使用as.numeric。您可能还对colSums函数感兴趣。 -
是否求和并不重要,因为 ggplot 无论如何都会堆叠类似填充的条:
DF %>% gather(Device, Number) %>% drop_na(Number) %>% ggplot(aes(Device, Number, fill = Device)) + geom_col(show.legend = FALSE)