我有如下示例資料:
df_list = list()
df_list[[1]] <- c("A", NA, "A", "Ab", "Ac", NA, NA, "AA")
df_list[[2]] <- c(NA, "A", NA, NA, "AA", NA)
df_list[[3]] <- c("AA", "Ac", "Ad", NA, NA, NA, "Af", NA)
df_list[[4]] <- c(NA, NA, "AA", "Ac", "Ad", "AA", NA)
df_list[[5]] <- c(NA, "Ae", NA, "Ad", "Af", NA, "AA", NA)
names(df_list)[1] <- "nr1"
names(df_list)[2] <- "nr2"
names(df_list)[3] <- "nr3"
names(df_list)[4] <- "nr4"
names(df_list)[5] <- "nr5"
df 看起來像這樣(注意不同的長度):
# A tibble: 8 x 5
nr1 nr2 nr3 nr4 nr5
<chr> <chr> <chr> <chr> <chr>
1 A NA AA NA NA
2 NA A Ac NA Ae
3 A NA Ad AA NA
4 Ab NA NA Ac Ad
5 Ac AA NA Ad Af
6 NA NA NA AA NA
7 NA Af NA AA
8 AA NA NA
對于每個串列項,我只想保留唯一的字串。
我一直在思考如何做到這一點,但我不知道該怎么做。
所需的輸出(以 df 形式):
# A tibble: 8 x 5
nr1 nr2 nr3 nr4 nr5
<chr> <chr> <chr> <chr> <chr>
1 A A AA AA Ae
2 Ab AA Ac Ac Ad
3 Ac Ad Ad Af
4 AA Af AA
以串列形式:
df_list = list()
df_list[[1]] <- c("A", "Ab", "Ac", "AA")
df_list[[2]] <- c("A","AA")
df_list[[3]] <- c("AA", "Ac", "Ad","Af")
df_list[[4]] <- c("AA", "Ac", "Ad")
df_list[[5]] <- c("Ae", "Ad", "Af", "AA")
names(df_list)[1] <- "nr1"
names(df_list)[2] <- "nr2"
names(df_list)[3] <- "nr3"
names(df_list)[4] <- "nr4"
names(df_list)[5] <- "nr5"
uj5u.com熱心網友回復:
這是一個purrr解決方案
library(purrr)
df_list %>%
map(~ unique(.x[!is.na(.x)])) %>%
map_dfc(., function(w) replace(character(max(lengths(.))), 1:length(w), w))
## A tibble: 4 x 5
# nr1 nr2 nr3 nr4 nr5
# <chr> <chr> <chr> <chr> <chr>
#1 A "A" AA "AA" Ae
#2 Ab "AA" Ac "Ac" Ad
#3 Ac "" Ad "Ad" Af
#4 AA "" Af "" AA
這個想法是首先洗掉所有 NA 和重復條目,然后我們將所有填充list元素列系結到tibble. 您可以將其縮短為一次map_dfc呼叫,但此版本有助于提高可讀性。
uj5u.com熱心網友回復:
一個辦法
tmp=lapply(df_list,function(x){unique(na.omit(x))})
asd=max(unlist(lapply(tmp,length)))
do.call(cbind,lapply(tmp,function(x){length(x)=asd;x}))
nr1 nr2 nr3 nr4 nr5
[1,] "A" "A" "AA" "AA" "Ae"
[2,] "Ab" "AA" "Ac" "Ac" "Ad"
[3,] "Ac" NA "Ad" "Ad" "Af"
[4,] "AA" NA "Af" NA "AA"
uj5u.com熱心網友回復:
我們可以使用purrr::map,discard,is.na,和unique。
回答
library(purrr)
df_list %>% map(discard, is.na)%>%
map(unique)
輸出
$nr1
[1] "A" "Ab" "Ac" "AA"
$nr2
[1] "A" "AA"
$nr3
[1] "AA" "Ac" "Ad" "Af"
$nr4
[1] "AA" "Ac" "Ad"
$nr5
[1] "Ae" "Ad" "Af" "AA"
uj5u.com熱心網友回復:
l <- sapply(df_list, function(x) unique(na.omit(x)))
sapply(l, function(x) {length(x) <- max(lengths(l)); x}) %>%
as_tibble()
# A tibble: 4 x 5
nr1 nr2 nr3 nr4 nr5
<chr> <chr> <chr> <chr> <chr>
1 A A AA AA Ae
2 Ab AA Ac Ac Ad
3 Ac NA Ad Ad Af
4 AA NA Af NA AA
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/348937.html
上一篇:n維陣列元素的Python組合
下一篇:不知道如何編輯溢位的串列項
