繁体   English   中英

在R中的字符串向量中对字符进行排序

[英]Sort character in vector of string in R

我有类似的数据

df <- structure(list(Sex = structure(c(1L, 1L, 2L, 1L, 2L, 2L, 1L, 
2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("F", "M"), class = "factor"), 
    Age = c(19L, 16L, 16L, 13L, 16L, 30L, 16L, 30L, 16L, 30L, 
    30L, 16L, 19L, 1L, 30L), I = c(1, 1, 0, 0, 1, 0, 1, 0, 1, 
    0, 0, 0, 1, 0, 1), E = c(0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 
    1, 0, 1, 0), S = c(1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 
    0, 1), N = c(0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0), 
    F = c(1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1), T = c(0, 
    1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0), C = c(1, 1, 1, 
    0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1), D = c(0, 0, 0, 1, 0, 
    1, 0, 1, 0, 1, 1, 1, 1, 0, 0), type = c("CIFS", "CITN", "CESF", 
    "DEFS", "CIFN", "DETS", "CITS", "DEFS", "CIFN", "DEFN", "DETS", 
    "DETS", "DINF", "CENT", "CIFS"), PO = runif(15, -3, 3), AO = runif(15, -3, 3)), .Names = c("Sex", 
"Age", "I", "E", "S", "N", "F", "T", "C", "D", "type", "PO", 
"AO"), class = c("tbl_dt", "tbl", "data.table", "data.frame"), row.names = c(NA, 
-15L))

我想对列type进行排序。 不是列,而是其中的字符。 然后得到相同的结构。 例如, CIFS应该是CFIS 我试图这样做,

df <- within(df, {
    type <- apply(sapply(strsplit(df[, type], split=''), sort), 2, 
        function(x) paste0(x, collapse = ''))
})

有没有我找不到的更简单的解决方案。

由于您使用的是data.table,因此我建议

df[, type := paste(sort(unlist(strsplit(type, ""))), collapse = ""), by = type]

如何对字符串中的字母进行排序中所述?

这对data.framedata.tabledata.frame (仅适用于基本R):

df$type <- vapply(strsplit(df$type, split=''),FUN=function(x)paste(sort(x),collapse=''),"")

结果:

> df
   Sex Age I E S N F T C D type         PO         AO
1    F  19 1 0 1 0 1 0 1 0 CFIS  2.9750666  2.0308410
2    F  16 1 0 0 1 0 1 1 0 CINT  0.7902187  2.0891158
3    M  16 0 1 1 0 1 0 1 0 CEFS -1.7173785  2.4774140
4    F  13 0 1 1 0 1 0 0 1 DEFS  1.5352127 -1.9272470
5    M  16 1 0 0 1 1 0 1 0 CFIN -0.2160741  1.7359897
6    M  30 0 1 1 0 0 1 0 1 DEST  2.6314981 -0.6252466
7    F  16 1 0 1 0 0 1 1 0 CIST -1.6032894 -1.9938226
8    M  30 0 1 1 0 1 0 0 1 DEFS  0.7748583 -2.0935737
9    F  16 1 0 0 1 1 0 1 0 CFIN -2.9368356  0.3363364
10   F  30 0 1 0 1 1 0 0 1 DEFN -0.6506217  2.6681535
11   F  30 0 1 1 0 0 1 0 1 DEST -0.4432578  0.4627441
12   F  16 0 1 1 0 0 1 0 1 DEST  2.0236760  2.7684298
13   F  19 1 0 0 1 1 0 0 1 DFIN -1.1774931  2.6546726
14   F   1 0 1 0 1 0 1 1 0 CENT -2.2365388  2.7902646
15   F  30 1 0 1 0 1 0 1 0 CFIS -1.6139238 -2.4982620

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM