在R中,如何合并两组分裂函数的结果



我有一个数据框架,一列中有4组学生的成绩,另一列中是对一个问题的回答。我正在使用split函数创建一个boxplot,然后测试组。我只想创建两个组(合并两个最低的组和两个最高的组(。然而,我正在为此而挣扎。split函数给出一个数据帧,一个矩阵,向量?

df <- data.frame(
groups = c("group 1", "group 2", "group 3", "group 4", "group 1", "group 2", "group 3", "group 4"),
responses = c(1, 4, 5, 9, 3, 4, 6, 9)
)
splittedDF <- split(x = df$responses, f = df$groups)

THis给出以下输出:

$`group 1`
[1] 1 3
$`group 2`
[1] 4 4
$`group 3`
[1] 5 6
$`group 4`
[1] 9 9

我想合并到这样的东西:

$`Lowest groups`
[1] 1 3 4 4
$`Highest groups`
[1] 5 6 9 9 

你有什么想法吗?

我们可以先执行arrange,然后在执行split之前创建分组

library(dplyr)
df %>% 
arrange(responses, groups) %>% 
mutate(groups = c("Lowest groups", "Highest groups")[gl(n(), 4, n())]) %>%
{split(.$responses, .$groups)}

-输出

$`Highest groups`
[1] 5 6 9 9
$`Lowest groups`
[1] 1 3 4 4

如果已订购拆分列表,

list(`Lowest groups` = unname(unlist(head(splittedDF, 2))),
`Highest groups` = unname(unlist(tail(splittedDF, 2))))

-输出

$`Lowest groups`
[1] 1 3 4 4
$`Highest groups`
[1] 5 6 9 9

如果未排序,则从每个列表元素中获取max值,order

i1 <- order(sapply(splittedDF, max))
splittedDF2 <- splittedDF[i1]
list(`Lowest groups` = unname(unlist(head(splittedDF2, 2))),
`Highest groups` = unname(unlist(tail(splittedDF2, 2))))

最新更新