簡體   English   中英

在 tidyverse 中的列表列上使用 pull 后如何設置名稱

[英]How to set_names after using pull on a list column in the tidyverse

鑒於以下情況:

library(tidyverse)
my_tibble <- tibble(
  var_1 = c("label_a", "label_b", "label_c"),
  var_2 = c("another_x", "another_y", "another_z"),
  result = list(
    data.frame(x = 1, y = 2, z = 3),
    data.frame(x = 4, y = 5, z = 6),
    data.frame(x = 5, y = 10, z = 11)
  )
)

my_tibble
# # A tibble: 3 x 3
#   var_1   var_2     result          
#   <chr>   <chr>     <list>          
# 1 label_a another_x <df[,3] [1 x 3]>
# 2 label_b another_y <df[,3] [1 x 3]>
# 3 label_c another_z <df[,3] [1 x 3]>

如果我們pull取結果列表列,我們會得到:

my_tibble %>% pull(result)

# [[1]]
#   x y z
# 1 1 2 3
# 
# [[2]]
#   x y z
# 1 4 5 6
# 
# [[3]]
#   x  y  z
# 1 5 10 11

如何通過引用原始 tibble 中的多個列來設置此拉取結果的名稱(例如set_names() )? 也就是說,我希望該列表具有引用 tibble 的名稱,而不是未命名的列表,例如:

# $`label_a | another_x`
#   x y z
# 1 1 2 3
# 
# $`label_b | another_y`
#   x y z
# 1 4 5 6
# 
# $`label_c | another z`
#   x  y  z
# 1 5 10 11

而是按其他順序執行嗎?

> my_tibble %>%
    mutate(result = set_names(result,paste(var_1,var_2,sep = " | "))) %>%
    pull(result)

$`label_a | another_x`
  x y z
1 1 2 3

$`label_b | another_y`
  x y z
1 4 5 6

$`label_c | another_z`
  x  y  z
1 5 10 11

enframe tibble deframe功能,盡管從 v2.1.3 開始,它們都表示它們正在成熟。 deframe從數據框中創建一個命名列表。 它假定第一列是名稱,第二列是值,所以只需為名稱創建一列(我使用tidyr::unite )。

library(dplyr)

my_tibble %>%
  tidyr::unite(key, var_1, var_2, sep = " | ") %>%
  tibble::deframe()
#> $`label_a | another_x`
#>   x y z
#> 1 1 2 3
#> 
#> $`label_b | another_y`
#>   x y z
#> 1 4 5 6
#> 
#> $`label_c | another_z`
#>   x  y  z
#> 1 5 10 11

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM