gpt4 book ai didi

r - 数据框行按组嵌套列表元素

转载 作者:行者123 更新时间:2023-12-04 09:46:13 25 4
gpt4 key购买 nike

我有一个这样的数据框

  id key value
1 x a 1
2 x b 2
3 y a 3
4 y b 4

read.table(text = "id key value
x a 1
x b 2
y a 3
y b 4", header = TRUE, sep = "\t")

我想为每个 id 获取一个列表,为每个 key 获取子列表

所以对于我的示例,预期的输出将是:

$x
$x$a
$x$a$value
[1] 1

$x$b
$x$b$value
[1] 2

$y
$y$a
$y$a$value
[1] 3

$y$b
$y$b$value
[1] 4

list(
x = list(
a = list(value = 1),
b = list(value = 2)
),
y = list(
a = list(value = 3),
b = list(value = 4)
)
)

我可以使用嵌套的 lapplysplit 来实现它,但我认为应该有更直接的方法来实现它。

如有任何帮助,我们将不胜感激。

最佳答案

概览

两种方法 - 一种使用 base另一个使用 plyr - 按组拆分数据框,对每个组应用一个函数,并在列表中返回结果。

使用base::split.data.frame()接着是 lapply()为每个唯一的 id-key 对提取 value 元素。

# split data frame
# based on 'id' and 'key' pairs
df.split <-
split.data.frame(
x = df
, f = list( df$id, df$key )
)
# keep only the value
# element within each list
df.split <-
lapply(
X = df.split
, FUN = function( i )
i[["value"]]
)

# view results
df.split
# $x.a
# [1] 1
#
# $y.a
# [1] 3
#
# $x.b
# [1] 2
#
# $y.b
# [1] 4

# end of script #

使用plyr::dlply()做同样的事情,而不需要 lapply()

# load necessary packages
library( plyr )

# splits df by the 'id' and 'key' variables
# and return the 'value' for each pairing
df.split <-
dlply(
.data = df
, .variables = c( "id", "key" )
, .fun = function(i) i[["value"]]
)

# view results
df.split
# $x.a
# [1] 1
#
# $x.b
# [1] 2
#
# $y.a
# [1] 3
#
# $y.b
# [1] 4
#
# attr(,"split_type")
# [1] "data.frame"
# attr(,"split_labels")
# id key
# 1 x a
# 2 x b
# 3 y a
# 4 y b

# end of script #

@Colonel Beauvel 对 SO 帖子的回答 Emulate split() with dplyr group_by: return a list of data frames有助于回答这个问题。

关于r - 数据框行按组嵌套列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49054737/

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