我有很多数据集: df 作为主要数据框(但让我们将它们想象为非常大的数据集)
df = data.frame(x = seq(1,20,2),
y = c('a','a','b','c','a','a','b','c','a','a'),
z = c('d','e','e','d','f','e','e','d','e','f') )
g = data.frame(xx = c(2,3,4,5,7,8,9) )
h = data.frame(xx = c(3,5,7,8,9) )
i = data.frame(xx = c(2,3,6,8) )
j = data.frame(xx = c(1,3,6) )
我希望每次使用每个其他数据帧的 xx 制作一组 df y 列的频率表(xx 用于对 df 进行子集化)。
然后每次使用每个其他数据帧的 xx 对 df 的 Z 列制作一组频率表(xx 用于对 df 进行子集化)。
下一个:
我想可视化一个变量的每个值的频率以研究其发展:
例如:对于变量 y:值 a 从 g 到 j 的发展是: 2 2 1 2。我想以一种简单的方式可视化变量 y 的每个值的这种发展。
我们可以将数据集放在
list
中(dplyr::lst
- 返回命名列表),使用 list
循环遍历 map
,基于“x”列对主数据集进行子集化或执行 inner_join
并获取频率count
library(dplyr)
library(purrr)
map(lst(g, h, i,j),
~ inner_join(df, .x, by = c("x" = "xx")) %>%
count(y, name = 'Count'))
-输出
$g
y Count
1 a 2
2 b 1
3 c 1
$h
y Count
1 a 2
2 b 1
3 c 1
$i
y Count
1 a 1
$j
y Count
1 a 2
或者在
base R
lapply(list(g = g, h = h, i = i, j = j),
\(dat) subset(df, x %in% dat$xx, select = y ) |>
table())
如果我们需要可视化,可以转换为单个数据集,然后使用
geom_col/geom_bar
绘制条形图,或者在基本 R 中使用
barplot
library(ggplot2)
map_dfr(lst(g, h, i,j),
~ inner_join(df, .x, by = c("x" = "xx")) %>%
count(y, name = 'Count'), .id = 'grp') %>%
ggplot(aes(x = grp, y = Count, fill = y)) +
geom_col(position = "dodge")