如何基于一系列子集在数据帧上创建表函数 - 然后可视化结果表的特定值?

问题描述 投票:0回答:1

我有很多数据集: 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 的每个值的这种发展。

r dataframe subset
1个回答
3
投票

我们可以将数据集放在

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")
© www.soinside.com 2019 - 2024. All rights reserved.