有没有办法在数据框中按字符长度对行值进行排序?

问题描述 投票:0回答:1

这是我仅包含字符的较大数据框的示例。

df1 <- structure(list(V1 = c("00094", "00002", "00005", "00006", "00009", 
"00010", "00012", "00013", "00015", "00017"), V2 = c(NA, NA, 
NA, "2021-05-03", "2021-04-28", "Mentioned in T4 CRF", NA, "2022-10-10", 
"Mentioned in B1 CRF", "2022-07-14 w/ PCR-test"), V3 = c(NA, 
NA, NA, NA, "2022-07-12", "Antigen test, T4 CRF", NA, NA, NA, 
NA), V4 = c(NA, NA, NA, NA, "2022-06-15", "2022-02-28", NA, NA, 
NA, NA), V5 = c(NA, NA, NA, NA, NA, "Mentioned in B0 CRF", NA, 
NA, NA, NA), V6 = c(NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_), V7 = c(NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_)), row.names = c(NA, 
10L), class = "data.frame")

有什么方法可以按一行中每个字符的长度对每一行进行排序吗?例如在第 6 行(其中 V1 = 00010),我希望 V1 保留在第一列(它在该行中的字符数也最少),然后是 V4(nchar = 10),然后是 V2 和 V5( nchar = 19) 最后是 V3 (nchar = 20)。有没有办法做到这一点?

是否也可以对 nchar=10 的字符串进行排序,这实际上是一个从旧到新的日期? - 我可以在对行进行排序后找到一种方法来执行此操作,但是如果有一种方法可以同时根据字符长度对行进行排序,那就太好了

非常感谢!

r dataframe sorting character
1个回答
2
投票

您可以使用

apply()
nchar(x)
x
本身的顺序对每一行进行排序。请注意,在输出的第 5 行中,
2022-06-15
已移至
2022-07-12
的前面。

as.data.frame(t(apply(df1, 1, \(x) x[order(nchar(x), x)])))

      V1                     V2                  V3                  V4                   V5   V6   V7
1  00094                   <NA>                <NA>                <NA>                 <NA> <NA> <NA>
2  00002                   <NA>                <NA>                <NA>                 <NA> <NA> <NA>
3  00005                   <NA>                <NA>                <NA>                 <NA> <NA> <NA>
4  00006             2021-05-03                <NA>                <NA>                 <NA> <NA> <NA>
5  00009             2021-04-28          2022-06-15          2022-07-12                 <NA> <NA> <NA>
6  00010             2022-02-28 Mentioned in B0 CRF Mentioned in T4 CRF Antigen test, T4 CRF <NA> <NA>
7  00012                   <NA>                <NA>                <NA>                 <NA> <NA> <NA>
8  00013             2022-10-10                <NA>                <NA>                 <NA> <NA> <NA>
9  00015    Mentioned in B1 CRF                <NA>                <NA>                 <NA> <NA> <NA>
10 00017 2022-07-14 w/ PCR-test                <NA>                <NA>                 <NA> <NA> <NA>
© www.soinside.com 2019 - 2024. All rights reserved.