r - 使用 tidyverse 到 "unnest"小标题内的 data.frame 列

标签 r dataframe dplyr tidyr tibble

我正在处理一些从 www 调用返回的数据,该调用 jsonliteas_tibble以某种方式转换成 data.frame柱子。
result数据有一个 Id整数列和 ActionCode带有两个内部列的 data.frame 列。这些在控制台中显示为:

> result
# A tibble: 117 x 2
  Id    ActionCode$Code $Name 
  <int> <chr>           <chr>
  1     A1              First Code
  2     A2              Second Code
  3     A3              Third Code
  4     A4              Fourth Code
  ...
这可以通过 str() 检查作为:
> result %>% str()
tibble [117 x 2] (S3: tbl_df/tbl/data.frame)
 $ Id : int [1:117] 1 2 3 4 ...
 $ ActionCode:'data.frame': 117 obs. of  2 variables:
  ..$ Code: chr [1:117] "A1" "A2" "A3" "A4" ...
  ..$ Name: chr [1:117] "First Code" "Second Code" "Third Code" "Fourth Code" ...
我见过例如https://tibble.tidyverse.org/articles/types.html那种data.frame列是完全合法的,但我正在努力研究如何从整洁的 dplyr 管道访问此列中的数据 - 例如我不能select(ActionCode$Code)有没有办法在 dplyr 中使用这些列管道?或者有没有办法以某种方式展平这些列,类似于 unnest可用于 list列(尽管我在这里意识到我没有创建额外的行 - 我只是扁平化列层次结构)。
即我试图找到一个函数 foo可以输出:
> result %>% foo() %>% str()
tibble [117 x 2] (S3: tbl_df/tbl/data.frame)
 $ Id : int [1:117] 1 2 3 4 ...
 $ Code: chr [1:117] "A1" "A2" "A3" "A4" ...
 $ Name: chr [1:117] "First Code" "Second Code" "Third Code" "Fourth Code" ...

我无法提供 www 调用作为示例,但作为一个工作示例,我认为我所看到的数据类型类似于:
sample_data <- tibble(
  Id = 1:10,
  ActionCode = tibble(
    Code = paste0("Id", 1:10),
    Name = paste0("Name ", 1:10),
  )
)

最佳答案

重新转换为 data.framedo.call展平列

library(dplyr)
library(stringr)
do.call(data.frame, sample_data) %>% 
    rename_at(vars(starts_with('ActionCode')), ~ 
        str_remove(., 'ActionCode\\.')) %>% 
    as_tibble
-输出
# A tibble: 10 x 3
#      Id Code  Name   
#   <int> <chr> <chr>  
# 1     1 Id1   Name 1 
# 2     2 Id2   Name 2 
# 3     3 Id3   Name 3 
# 4     4 Id4   Name 4 
# 5     5 Id5   Name 5 
# 6     6 Id6   Name 6 
# 7     7 Id7   Name 7 
# 8     8 Id8   Name 8 
# 9     9 Id9   Name 9 
#10    10 Id10  Name 10

关于r - 使用 tidyverse 到 "unnest"小标题内的 data.frame 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65815651/

相关文章:

r - 如何匹配两个数据帧的字符值并在 R 中应用与此匹配对应的函数?

r - 从每一行的字符串中评估不同的逻辑条件

r - ggplot 图例中缺少彩条,Windows 远程桌面

dataframe - pyspark 相当于 pandas groupby + apply on column

java - 如何使用 Java 将 Spark 数据集的所有列转换为字符串

r - 创建 data.frame 时添加到列名称中的 X 和点

r - 使用dplyr摘要对多个列进行不同的操作

r - 如何对 R 中管道序列中的列选择应用函数?

R:为wordcloud图形/png添加标题

r - 有没有办法强制 ode() [deSolve-R 包] 在 ode 函数中的每个积分步骤提供输出