r-如何运行嵌套的df并将列名作为新列名的一部分



我意识到我的标题可能有点令人困惑。我有一些JSON对unnest有点混淆。我正试着利用这个小精灵。

样本数据

df <- structure(list(long_abbr = c("Team11", "BBS"), short_name = c("Ac ", 
"BK"), division = c("", ""), name = c("AC Slaters Muscles", "Broken Bats"
), abbr = c("T1", "T1"), owners = list(structure(list(commissioner = 0L, 
                                                    name = "Chris Liss", id = "300144F8-79F4-11EA-8F25-9AE405472731"), class = "data.frame", row.names = 1L), 
                                     structure(list(commissioner = 1L, name = "Mark Ortin", id = "90849EF6-7427-11EA-95AA-4EEEAC7F8CD2"), class = "data.frame", row.names = 1L)), 
id = c("1", "2"), logged_in_team = c(NA_integer_, NA_integer_
)), row.names = 1:2, class = "data.frame")
)

# Unnest Owners Information
df <- df %>% 
unnest(owners)

由于我有使用name的重复列,因此出现以下错误。

Error: Column names `name` and `id` must not be duplicated.

有没有一种简单的方法可以通过在嵌套列之前使用前缀owners(或者在我的情况下,我希望它使用包含嵌套df的列的任何名称(的命名约定来取消对列的命名。即owners.commissionerowners.nameowners.id。我也会对使用camel case和下划线的解决方案感兴趣。例如ownersNameowners_name

设置参数names_sep:

df <- structure(
list(long_abbr = c("Team11", "BBS"), 
short_name = c("Ac ", "BK"), 
division = c("", ""), 
name = c("AC Slaters Muscles", "Broken Bats"), 
abbr = c("T1", "T1"), 
owners = list(
structure(list(commissioner = 0L, name = "Chris Liss", 
id = "300144F8-79F4-11EA-8F25-9AE405472731"), 
class = "data.frame", row.names = 1L), 
structure(list(commissioner = 1L, name = "Mark Ortin", 
id = "90849EF6-7427-11EA-95AA-4EEEAC7F8CD2"), 
class = "data.frame", row.names = 1L)), 
id = c("1", "2"), 
logged_in_team = c(NA_integer_, NA_integer_)), 
row.names = 1:2, class = "data.frame"
)
tidyr::unnest(df, owners, names_sep = "_")
#> # A tibble: 2 x 10
#>   long_abbr short_name division name  abbr  owners_commissi… owners_name
#>   <chr>     <chr>      <chr>    <chr> <chr>            <int> <chr>      
#> 1 Team11    "Ac "      ""       AC S… T1                   0 Chris Liss 
#> 2 BBS       "BK"       ""       Brok… T1                   1 Mark Ortin 
#> # … with 3 more variables: owners_id <chr>, id <chr>, logged_in_team <int>

由reprex包(v0.3.0(于2020-04-26创建

这能解决你的问题吗?

最新更新