gpt4 book ai didi

r - 取消列出/取消数据框中字符向量的嵌套?

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

是否有使用 dplyr 在数据框中取消列出或取消嵌套矢量的功能或方法?我有以下示例。

library(tidyverse)
df <- tibble(x =
c("c(\"Police\", \"Pensions\")",
"c(\"potato\", \"sweetpotato\")"))
df
# A tibble: 2 x 1
x
<chr>
1 "c(\"Police\", \"Pensions\")"
2 "c(\"potato\", \"sweetpotato\")"

我想将该数据框列转换成这样的格式。

> df
# A tibble: 4 x 1
x
<chr>
1 Police
2 Pensions
3 Potato
4 Sweetpotato

最佳答案

一个选项是separate_rows

library(tidyverse)
df %>%
separate_rows(x) %>%
filter(!x %in% c('c', ''))
# A tibble: 4 x 1
# x
# <chr>
#1 Police
#2 Pensions
#3 potato
#4 sweetpotato

注意:分离和过滤

会更快/更有效

或者另一种选择是提取引号之间的单词,然后 unnest

df %>% 
mutate(x = str_extract_all(x, '(?<=")[A-Za-z]+')) %>%
unnest
# A tibble: 4 x 1
# x
# <chr>
#1 Police
#2 Pensions
#3 potato
#4 sweetpotato

基准

在稍微大一点的数据上,

df1 <- df[rep(1:nrow(df), each = 1e5), ]

system.time({
df1 %>%
separate_rows(x) %>%
filter(!x %in% c('c', ''))


})
#. user system elapsed
# 0.916 0.033 0.939


system.time({
df1 %>%
mutate(x = str_extract_all(x, '(?<=")[A-Za-z]+')) %>%
unnest

})
# user system elapsed
# 0.763 0.015 0.773


system.time({

df1 %>%
mutate(x = map(x,~eval(parse(text=.)))) %>%
unnest

})
#user system elapsed
# 15.643 1.813 17.375

关于r - 取消列出/取消数据框中字符向量的嵌套?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54329473/

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