R 在data.table向量内对列表进行排序
我有一个字符串数据表,我试图将其转换为列表并进行排序,而无需对向量本身进行排序:R 在data.table向量内对列表进行排序,r,data.table,R,Data.table,我有一个字符串数据表,我试图将其转换为列表并进行排序,而无需对向量本身进行排序: > DT <- data.table(x=c("A11, A12, A41", + "A11, A41, B11, A6, A21", + "A41, A12", + "A12, A41", + "A12, A6, B41, A93"))
> DT <- data.table(x=c("A11, A12, A41",
+ "A11, A41, B11, A6, A21",
+ "A41, A12",
+ "A12, A41",
+ "A12, A6, B41, A93"));DT
x
1: A11, A12, A41
2: A11, A41, B11, A6, A21
3: A41, A12
4: A12, A41
5: A12, A6, B41, A93
我尝试过使用一系列的顺序
ing、as.list
、indata.frames
,以及我尝试编写的data.table
函数:
sortlists <- function(DT,col){
for(i in 1:length(DT[,col])){
DT[i,col]=order(DT[i,col])
}
}
sortlists这将拆分字符向量,然后对每行进行排序并返回一个列表
DT[, list(y = lapply(strsplit(x,', '), sort))]
y
1: A11,A12,A41
2: A11,A21,A41,A6,B11
3: A12,A41
4: A12,A41
5: A12,A6,A93,B41
DT[, list(y = vapply(strsplit(x,', '), function(x) paste(sort(x), collapse = ', '), FUN.VALUE =character(1)))]
和。如果您真的想为每行使用单个字符串
DT[, list(y = lapply(strsplit(x,', '), sort))]
y
1: A11,A12,A41
2: A11,A21,A41,A6,B11
3: A12,A41
4: A12,A41
5: A12,A6,A93,B41
DT[, list(y = vapply(strsplit(x,', '), function(x) paste(sort(x), collapse = ', '), FUN.VALUE =character(1)))]
请注意,order
和sort
将“A12”放在“A6”之前,感谢您指出这一点!我只是手工做的,我现在就把它修好。对于第二个,我认为应该是sapply
或vapply
来获取字符向量,而不是列表。