【发布时间】:2018-01-06 14:40:18
【问题描述】:
编辑
这个问题似乎是问题How to group a vector into a list of vectors?的重复,建议回答split(df$b, df$id)。首先对解决方案感到满意,我意识到给定的答案并不能完全解决我的问题。在下面的问题中,我想获得一个列表,其中向量元素被分配给第三列的值(在我的示例中为df$a)。这很重要,否则df$b 的顺序 会起作用。我的意思是显然我可以通过df$a 安排,然后致电split(),但也许还有另一种方法。
我的样本df:
df <- data_frame(id = paste0('id',rep(1:2, each = 5)), a = rep(letters[1:5],2),b=c(1:5,5:1))
Df 应按 ID 分组(在 df$id 中)。我想为每个包含df$b 值的组(id)元素创建一个向量列表。我的方法
require(tidyr)
spread_df <- df %>% spread(id,b) #makes new columns for each id
#loop over spread_df
for (i in 1:length(spread_df)) {
list_group_elements [i]<- list(spread_df[[i]])
#I want each vector to be identified by the identifier of column df$a
#therefore:
names(list_group_elements[[i]]) <- list_group_elements[[1]]
}
这会导致:
list_group_elements
[[1]]
a b c d e
"a" "b" "c" "d" "e"
[[2]]
a b c d e
1 2 3 4 5
[[3]]
a b c d e
5 4 3 2 1
我不需要列表的第一个元素,但其余的基本上是我需要的。我有一种特殊的印象,即我的方法有些不理想,如果有人有改进的想法(例如,使用 dplyr?),我们将不胜感激。为什么我想要这个:我创建了一个使用向量作为参数的函数,我想在数据帧中的某些列上运行这个函数——但只使用分组值作为参数,而不是整个列。
【问题讨论】:
-
split(df$b, df$id) -
@Henrik,感谢您指出这一点,特别是帮助我理解您所指的繁琐问题和答案。我实际上已经看到了这个问题,并且因为它以一种对我来说不清楚的方式被问到,我认为这不是我正在寻找的。但是您当然是绝对正确的,感谢您挖掘出隐藏在评论中的问题的答案。
-
@Henrik 此外,我在想如果你能提供你的解决方案作为答案,我可以接受这个和其他没有经验的用户,因为我可以更容易地找到这个奇妙的答案,因为它不会被拉扯离开评论..
-
@Henrik,经过一番考虑,我相信所有给出的答案并不完全是我想要的。我已经编辑了我的问题,希望它能更清楚地说明我需要什么。
-
您可以在拆分前将
df$b命名为向量:split(setNames(df$b, df$a), df$id)。