根据来自另一个文件的值列表绘制列中出现的值频率的直方图

时间:2019-04-24 16:15:33

标签: r

我非常感谢您的帮助。 我想根据另一个文件中的值列表来计算列中值的频率。

l1 <- data.frame(V1 = c("A1", "A2", "B-1", "C", "D", "E1")

l2 <- data.frame(
          V1 = c("m1", "m2", "m3", "m4", "m5", "m6"), 
          V2 = c("A1", "A1", "E1", "C", "D", "E1")
      )

我想为V2的{​​{1}}中的值频率绘制直方图。但是-x轴值应为l2。例如,l1中缺少A2和B-1,但仍应在x轴上将它们显示为标签。我们可以在ggplot中做到吗?

我尝试了l2$V2

绘制直方图,其中l1为x轴标签。频率为l2 $ V2(例如:A1-2,频率应为= 2/6)

1 个答案:

答案 0 :(得分:0)

您可以从库 dplyr 中使用函数count()轻松计算V2的频率(以l2为单位)。

library(dplyr)
count(l2, V2)

#   V2        n
# 1 A1        2
# 2 C         1
# 3 D         1
# 4 E1        2

然后,将l1转换为数据框,并将其与计数结果合并,以将所有级别保留在l1中:

l1 <- c("A1", "A2", "B-1", "C", "D", "E1")
left_join(data.frame(V2 = l1), count(l2, V2), by = 'V2') 

#    V2  n
# 1  A1  2
# 2  A2 NA
# 3 B-1 NA
# 4   C  1
# 5   D  1
# 6  E1  2

然后,您可以除以观察数(在这种情况下为6)来计算比例,然后可以构建直方图(例如,使用 ggplot2 ;如果您使用的是barplot()喜欢)。

library(ggplot2)
left_join(data.frame(V2 = l1), count(l2, V2), by = 'V2') %>% 
   ggplot(aes(x = V2, y = n)) + 
   geom_col()