如何使用 unique 和 tidyR 拆分我的列
How to split my columns using a unique and tidyR
我正在处理一个 data.table 的专栏,如下所示:
A <- c("a;b;c","a;a;b","d;a;b","f;f;f")
df <- data.frame(A)
我想将此列分成 3 列,如下所示:
seg1 seg2 seg3
1 a b c
2 a b <NA>
3 d a b
4 f <NA> <NA>
这里的问题是,当我按 ";"
拆分每一行时,我需要保留该行的 unique
。
library(stringr)
A <- c("a;b;c","a;a;b","d;a;b","f;f;f")
df <- data.frame(A)
df <- str_split_fixed(df$A, ";", 3)
df <- apply(X = df,
FUN = function(x){
return(x[!duplicated(x)][1:ncol(df)])
},
MARGIN = 1)
df <- t(df)
df <- as.data.frame(df)
names(df) <- c("seg1", "seg2", "seg3")
df
# seg1 seg2 seg3
# 1 a b c
# 2 a b <NA>
# 3 d a b
# 4 f <NA> <NA>
这是一个 tidyverse
方法。我们将 A
中的字符拆分,仅保留 unique
值,将结果粘贴回去并将 separate
分为三列:
library(tidyverse)
df %>%
mutate(A = map(strsplit(as.character(A), ";"),
.f = ~ paste(unique(.x), collapse = ";"))) %>%
separate(A, into = c("seg1", "seg2", "seg3"))
给出:
# seg1 seg2 seg3
#1 a b c
#2 a b <NA>
#3 d a b
#4 f <NA> <NA>
我正在处理一个 data.table 的专栏,如下所示:
A <- c("a;b;c","a;a;b","d;a;b","f;f;f")
df <- data.frame(A)
我想将此列分成 3 列,如下所示:
seg1 seg2 seg3
1 a b c
2 a b <NA>
3 d a b
4 f <NA> <NA>
这里的问题是,当我按 ";"
拆分每一行时,我需要保留该行的 unique
。
library(stringr)
A <- c("a;b;c","a;a;b","d;a;b","f;f;f")
df <- data.frame(A)
df <- str_split_fixed(df$A, ";", 3)
df <- apply(X = df,
FUN = function(x){
return(x[!duplicated(x)][1:ncol(df)])
},
MARGIN = 1)
df <- t(df)
df <- as.data.frame(df)
names(df) <- c("seg1", "seg2", "seg3")
df
# seg1 seg2 seg3
# 1 a b c
# 2 a b <NA>
# 3 d a b
# 4 f <NA> <NA>
这是一个 tidyverse
方法。我们将 A
中的字符拆分,仅保留 unique
值,将结果粘贴回去并将 separate
分为三列:
library(tidyverse)
df %>%
mutate(A = map(strsplit(as.character(A), ";"),
.f = ~ paste(unique(.x), collapse = ";"))) %>%
separate(A, into = c("seg1", "seg2", "seg3"))
给出:
# seg1 seg2 seg3
#1 a b c
#2 a b <NA>
#3 d a b
#4 f <NA> <NA>