我嘗試按字母順序對每一行進行排序(為了解決這個問題
但是當我用pivot_wider回轉時,訂單就消失了。像這兒:

這樣做的原因是names_from引數保持它來自的原始順序 -> 這里name
我想知道
有沒有辦法保持之前pivot_wider安排的訂單arrange?
uj5u.com熱心網友回復:
我們可以使用pmap回圈遍歷行并sort使用na.last = TRUE
library(purrr)
pmap_dfr(df, ~ setNames(sort(c(...), na.last =TRUE), names(df)))
-輸出
# A tibble: 4 × 4
ALT_1 ALT_2 ALT_3 ALT_4
<chr> <chr> <chr> <chr>
1 AGT CAG G GAT
2 TGA TGC <NA> <NA>
3 AGC CGC TGA <NA>
4 T <NA> <NA> <NA>
如果我們想使用pivot_longer/pivot_wider, 而不是arrange, 使用sortinmutate因為arrange不會破壞 'name' 列的順序。
library(dplyr)
library(tidyr)
df %>%
mutate(id = row_number()) %>%
pivot_longer(
-id
) %>%
group_by(id) %>%
mutate(value = sort(value, na.last = TRUE)) %>%
ungroup %>%
pivot_wider(
names_from = name,
values_from = value
) %>%
select(-id)
-輸出
# A tibble: 4 × 4
ALT_1 ALT_2 ALT_3 ALT_4
<chr> <chr> <chr> <chr>
1 AGT CAG G GAT
2 TGA TGC <NA> <NA>
3 AGC CGC TGA <NA>
4 T <NA> <NA> <NA>
uj5u.com熱心網友回復:
你也可以做一些類似于pmap方法的事情rowwise
df <- structure(list(ALT_1 = c("GAT", "TGC", "AGC", "T"), ALT_2 = c("CAG",
"TGA", "CGC", NA), ALT_3 = c("G", NA, "TGA", NA), ALT_4 = c("AGT",
NA, NA, NA)), class = "data.frame", row.names = c(NA, -4L))
library(dplyr, warn.conflicts = FALSE)
df %>%
rowwise() %>%
mutate(c_across(everything()) %>%
sort(na.last = TRUE) %>%
as.data.frame.list() %>%
setNames(names(df)))
#> # A tibble: 4 × 4
#> # Rowwise:
#> ALT_1 ALT_2 ALT_3 ALT_4
#> <chr> <chr> <chr> <chr>
#> 1 AGT CAG G GAT
#> 2 TGA TGC <NA> <NA>
#> 3 AGC CGC TGA <NA>
#> 4 T <NA> <NA> <NA>
由reprex 包(v2.0.1)于 2021 年 11 月 28 日創建
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/368504.html
