我被這個可能很容易的任務困住了。
我有一個資料集,我想對某個變數進行分組,然后對于每個組,我想獲得幾個變數的計數。我認為這是一份作業map,但我無法理解它應該是什么樣子。我的想法是…… 喜歡:
library(tidyverse)
count_vars <- c("vs", "am", "gear")
mtcars |>
group_split(cyl) |>
map2(.x = _,
.y = !!!count_vars,
.f = ~.x |>
count(.y))
但這顯然行不通。
預期的結果將是一個串列,每個組有一個元素,在每個元素中我會有另一組串列(每個計數變數一個)。我也可以在每個組中獲取一個資料框,其中每個 var 的計數只是行系結。
有任何想法嗎?
注意:我不想像在一個簡單的count(as, vs, gear)命令中那樣嵌套計數,而是想要三個不同的“表”,每個變數一個。
一個例子(只為兩個變數做這件事可能看起來像:
[[1]][1]
# A tibble: 2 × 2
vs n
<dbl> <int>
1 0 1
2 1 10
[[1]][2]
# A tibble: 2 × 2
am n
<dbl> <int>
1 0 3
2 1 8
[[2]][1]
# A tibble: 2 × 2
vs n
<dbl> <int>
1 0 3
2 1 4
[[2]][2]
# A tibble: 2 × 2
am n
<dbl> <int>
1 0 4
2 1 3
[[3]][1]
# A tibble: 1 × 2
vs n
<dbl> <int>
1 0 14
[[3]][2]
# A tibble: 2 × 2
am n
<dbl> <int>
1 0 12
2 1 2
uj5u.com熱心網友回復:
之后group_split,回圈list,select只有來自'count_vars'的列,然后回圈列,tibble從列創建一個(如count預期的data.frame / tibble)并count在嵌套的tibble串列中獲得-結果,即每個 'cyl' 拆分串列,會有 3 個小標題
library(dplyr)
library(purrr)
mtcars |>
group_split(cyl) |>
map(.x = _, ~ .x |>
select(all_of(count_vars)) |>
imap(~ tibble(!!.y := .x) |>
count(across(everything()))))
-輸出
[1]]
[[1]]$vs
# A tibble: 2 × 2
vs n
<dbl> <int>
1 0 1
2 1 10
[[1]]$am
# A tibble: 2 × 2
am n
<dbl> <int>
1 0 3
2 1 8
[[1]]$gear
# A tibble: 3 × 2
gear n
<dbl> <int>
1 3 1
2 4 8
3 5 2
[[2]]
[[2]]$vs
# A tibble: 2 × 2
vs n
<dbl> <int>
1 0 3
2 1 4
[[2]]$am
# A tibble: 2 × 2
am n
<dbl> <int>
1 0 4
2 1 3
[[2]]$gear
# A tibble: 3 × 2
gear n
<dbl> <int>
1 3 2
2 4 4
3 5 1
[[3]]
[[3]]$vs
# A tibble: 1 × 2
vs n
<dbl> <int>
1 0 14
[[3]]$am
# A tibble: 2 × 2
am n
<dbl> <int>
1 0 12
2 1 2
[[3]]$gear
# A tibble: 2 × 2
gear n
<dbl> <int>
1 3 12
2 5 2
或者另一種選擇是使用nest并將其存盤在單個資料中作為list列
out <- mtcars %>%
select(cyl, all_of(count_vars)) %>%
nest(data = all_of(count_vars)) %>%
mutate(data = map(data, ~ .x %>%
split.default(names(.x)) %>%
map(~ .x %>%
count(across(everything())))))
-輸出
> out
# A tibble: 3 × 2
cyl data
<dbl> <list>
1 6 <named list [3]>
2 4 <named list [3]>
3 8 <named list [3]>
> out$data[[1]]
$am
# A tibble: 2 × 2
am n
<dbl> <int>
1 0 4
2 1 3
$gear
# A tibble: 3 × 2
gear n
<dbl> <int>
1 3 2
2 4 4
3 5 1
$vs
# A tibble: 2 × 2
vs n
<dbl> <int>
1 0 3
2 1 4
uj5u.com熱心網友回復:
這種 dplyr 方法是否會產生您正在尋找的輸出?
mtcars %>%
group_by(cyl) %>%
count(vs, am, gear)
如果沒有,你能舉一個你希望看到的例子嗎?
編輯:
mtcars %>%
group_by(cyl) %>%
add_tally(vs, name = 'vs') %>%
add_tally(am, name = 'am') %>%
add_tally(gear, name = 'gear') %>%
select(cyl, vs, am, gear) %>%
distinct()
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/521641.html
下一篇:堆疊直方圖的X軸編輯
