我知道数据框问题列表很多,但是我找不到解决这个简单问题的方法。可以说我有:
library(tidyverse)
library(janitor)
df <- data.frame( group = c(rep("A",3), rep("B", 6)),
test_value = c(0,1,2, 0,1,2,3,4,5))
df_list <- df %>%
split(.$group) %>%
map(~tabyl(.x$test_value))
df_list
# $A
# .x$test_value n percent
# 0 1 0.3333333
# 1 1 0.3333333
# 2 1 0.3333333
# $B
# .x$test_value n percent
# 0 1 0.1666667
# 1 1 0.1666667
# 2 1 0.1666667
# 3 1 0.1666667
# 4 1 0.1666667
# 5 1 0.1666667
Run Code Online (Sandbox Code Playgroud)
我要做的就是将其转换为以下命名数据框:
A_test_value A_n A_percent B_test_value B_n B_percent
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 0 1 0.333 0 1 0.167
2 1 1 0.333 1 1 0.167
3 2 1 0.333 2 1 0.167
4 NA NA NA 3 1 0.167
5 NA NA NA 4 1 0.167
6 NA NA NA 5 1 0.167
Run Code Online (Sandbox Code Playgroud)
我已经看到了,但这有点不同(将嵌套列表(长度不等)转换为数据框)
请问有人可以快速解决(也许是dplyr类型)吗?
也许您想加入?
library(dplyr)
library(purrr)
library(janitor)
df %>%
group_split(group) %>%
map(~tabyl(.x, test_value)) %>%
reduce(full_join, by = "test_value")
test_value n.x percent.x n.y percent.y
1 0 1 0.3333333 1 0.1666667
2 1 1 0.3333333 1 0.1666667
3 2 1 0.3333333 1 0.1666667
4 3 NA NA 1 0.1666667
5 4 NA NA 1 0.1666667
6 5 NA NA 1 0.1666667
Run Code Online (Sandbox Code Playgroud)
对于表示组的命名输出,您可以执行以下操作:
df %>%
split(.$group) %>%
map(~tabyl(.x, test_value)) %>%
imap(~set_names(.x, ifelse(names(.x) != "test_value", paste(.y, names(.x), sep = "_"), names(.x)))) %>%
reduce(full_join, by = "test_value")
test_value A_n A_percent B_n B_percent
1 0 1 0.3333333 1 0.1666667
2 1 1 0.3333333 1 0.1666667
3 2 1 0.3333333 1 0.1666667
4 3 NA NA 1 0.1666667
5 4 NA NA 1 0.1666667
6 5 NA NA 1 0.1666667
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |