gpt4 book ai didi

r - 是否有 tidyr 的 unnest() 函数的基础 R 版本?

转载 作者:行者123 更新时间:2023-12-05 05:58:02 25 4
gpt4 key购买 nike

我一直在大量使用 tidyverse,现在我对 base R 的可能性很感兴趣。

让我们来看看这个简单的data.frame

df <- data.frame(id = 1:4, nested = c("a, b, f", "c, d", "e", "e, f"))

使用 dplyrstringrtidyr 我们可以做到

df %>% 
mutate(nested = str_split(nested, ", ")) %>%
unnest(nested)

得到(让我们忽略tibble部分)

# A tibble: 8 x 2
id nested
<int> <chr>
1 1 a
2 1 b
3 1 f
4 2 c
5 2 d
6 3 e
7 4 e
8 4 f

现在我们要使用基础 R 工具重建这个。所以

transform(df, nested = strsplit(nested, ", "))

使用mutate部分,但是我们如何unnest()这个data.frame?我虽然想使用 unlist() 但找不到令人满意的方法。

最佳答案

我们可以在 named list 的一行中使用 stack

with(df, setNames(stack(setNames(strsplit(nested, ","), id))[2:1], names(df)))

-输出

   id nested
1 1 a
2 1 b
3 1 f
4 2 c
5 2 d
6 3 e
7 4 e
8 4 f

如果我们使用transform,那么使用rep根据list列的lengths进行复制

out <- transform(df, nested = strsplit(nested, ", "))
data.frame(id = rep(out$id, lengths(out$nested)), nested = unlist(out$nested))

关于r - 是否有 tidyr 的 unnest() 函数的基础 R 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68628810/

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