gpt4 book ai didi

r - 在 R 中替代 dlply

转载 作者:行者123 更新时间:2023-12-01 01:59:14 27 4
gpt4 key购买 nike

我的数据框包含以下内容:

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

关于r - 在 R 中替代 dlply,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37964987/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com