我在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))