我有一个数据框架,一列中有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))))