我的数据框包含以下内容:
data$Value data$Name
774 Name1
770 Name1
778 Name1
804 Name1
804 Name1
802 Name1
804 Name1
900 Name2
905 Name2
805 Name2
900 Name2
950 Name2
860 Name2
870 Name2
etc... etc... for 100 Names
因此,每个名称都有7个与之相关的值。我想通过变量“名称”对该数据帧进行分组,将其拆分并以列表的形式返回每个名称的7个值。这是我想要的输出的格式:
my_list$Name1 =
[[1]]
[1] 774 770 778 804 804 802 804
my_list$Name2 =
[[1]]
[1] 900, 905, 805, 900, 950, 860, 870
etc...
最简单的解决方案是使用plyr的
dlply
函数:my_list <- dlply(data, "Name", function(x) list(x$Value))
但是,我想避免使用plyr。有什么好的选择?我考虑过按以下方式拆分数据:
splits <- function(x) {
y <- subset(data, select = c(Name, Value))
splits <- split(y, y$Name)
return(splits)
}
my_list <- splits(data)
但是,这仍然返回以下格式的列表:
Value Name
(dbl) (chr)
1 774 Name1
2 770 Name1
3 778 Name1
4 804 Name1
5 804 Name1
6 802 Name1
7 804 Name1
更新:解决方案:
my_list <- lapply(split(data$Value, data$Name), list)
最佳答案
一种方法,
y <- subset(data, select = c(Name, Value))
list <- split(y, y$Name)
unlist(sapply(list, '[', 1))
要么
unlist(unname(sapply(list, '[', 1)))
或简单地(@docendo discimus的补充)
unlist(unname(split(y$Value, y$Name)))
关于您的评论,那么您可以这样做,
unname(split(y$Value, y$Name))
#[[1]]
#[1] 774 770 778 804 804 802 804
#[[2]]
#[1] 900 905 805 900 950 860 870