我非常感谢您的帮助。 我想根据另一个文件中的值列表来计算列中值的频率。
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)
答案 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()