使用unnest_wider修复r中的列名



我在R中遇到了问题,寻求您的帮助!

我有一个看起来像这样的代码(不幸的是,我不知道如何编写代码来创建这里的表)。我的表格看起来就像这样,例如,你可以看到字母";c">

person     zip_code
Laura      c("11001", "28720", "32948", "10309")
Mel        c("80239", "23909")
Jake       c("20930", "23929", "13909")

总之,我的"zip_code"列包含行字符向量,每个字符向量包含多个邮政编码

我想分开列"zip_code"分成多个列,每个列包含一个邮政编码(例如,zip_code_1", zip_code_2",等等)。为此,我一直使用unnest_wider:

unnest_wider(zip_code, names_sep="_") 

然而,每当我这样做时,unnest_wider生成的新列的名称就会出现错误。而不是"zip_code_1", "zip_code_2", "新名称为"zip_code_1[,1]"、"zip_code_2[,1]"one_answers"zip_code_3[,1]"。基本上,每个列名都有一个"[,1]"后来。

我没有在任何地方重复这些列名,所以我不知道为什么它们看起来像这样。

我不能手动重命名它们:

dplyr::rename(zip_code_1=`zip_code_[,1]`)

如果我这样做,我得到一个错误消息。

任何帮助修复这些名称是非常感谢!谢谢你!

对于OP的数据,这是matrix列的情况,因此,如果我们转换为矢量(不具有dim属性),names_sep应该工作

library(dplyr)
library(purrr)
library(tidyr)
df1 %>%
mutate(zip = map(zip, c)) %>% 
unnest_wider(zip, names_sep = "_")
# A tibble: 3 × 4
zip_1 zip_2 zip_3 zip_4
<chr> <chr> <chr> <chr>
1 10010 10019 10010 10019
2 10019 10032 10019 10032
3 11787 11375 11787 11375

或者正如@IceCreamToucan所提到的,unnest_wider中的transform选项将使其简洁

unnest_wider(df1, zip, names_sep = '_', transform = c)
# A tibble: 3 × 4
zip_1 zip_2 zip_3 zip_4
<chr> <chr> <chr> <chr>
1 10010 10019 10010 10019
2 10019 10032 10019 10032
3 11787 11375 11787 11375

数据
df1 <- structure(list(zip = list(structure(c("10010", "10019", "10010", 
"10019"), dim = c(4L, 1L)), structure(c("10019", "10032", "10019", 
"10032"), dim = c(4L, 1L)), structure(c("11787", "11375", "11787", 
"11375"), dim = c(4L, 1L)))), row.names = c(NA, -3L), class = c("tbl_df", 
"tbl", "data.frame"))
library(dplyr)
library(tidyr) # unnest, pivot_wider
dat %>%
mutate(
# because your sample data didn't have an ID-column
person = LETTERS[row_number()],
# it's better to work with list-columns of strings, not matrices
zip_code = lapply(zip_code, c)
) %>%
unnest(zip_code) %>%
group_by(person) %>%
mutate(rn = paste0("zip", row_number())) %>%
pivot_wider(person, names_from = "rn", values_from = "zip_code") %>%
ungroup()
# # A tibble: 6 x 5
#   person zip1  zip2  zip3  zip4 
#   <chr>  <chr> <chr> <chr> <chr>
# 1 A      11374 11374 NA    NA   
# 2 B      10023 10023 NA    NA   
# 3 C      10028 10028 NA    NA   
# 4 D      11210 12498 11210 12498
# 5 E      10301 10301 NA    NA   
# 6 F      12524 10605 12524 10605

数据
dat <- structure(list(zip_code = list(structure(c("11374", "11374"), .Dim = 2:1), structure(c("10023", "10023"), .Dim = 2:1), structure(c("10028", "10028"), .Dim = 2:1), structure(c("11210", "12498", "11210", "12498"), .Dim = c(4L, 1L)), structure(c("10301", "10301"), .Dim = 2:1), structure(c("12524", "10605", "12524", "10605"), .Dim = c(4L, 1L)))), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -6L))

相关内容

  • 没有找到相关文章

最新更新