我有一个字符串数据表,我试图将其转换为列表并排序,而不对矢量本身进行排序:
> 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
Run Code Online (Sandbox Code Playgroud)
我需要去的地方:
x
1: A11, A12, A41
2: A11, A21, A41, A6, B11
3: A12, A41
4: A12, A41
5: A12, A6, A93, B41
Run Code Online (Sandbox Code Playgroud)
我尝试过使用一堆ordering,as.lists和in data.frames,以及data.table我尝试编写的函数:
sortlists <- function(DT,col){
for(i in 1:length(DT[,col])){
DT[i,col]=order(DT[i,col])
}
}
Run Code Online (Sandbox Code Playgroud)
这会抛出我的列位置大于ncol(x)的错误.无论如何,必须有更好的方法来获得我想要的结果.我是R的新手,对data.tables非常陌生(因为我听过好的东西,我想更多地表达)所以任何帮助都将不胜感激!
这将分割字符向量,然后排序并返回每行的列表
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
Run Code Online (Sandbox Code Playgroud)
和.如果你真的想要每行的单个字符串
DT[, list(y = vapply(strsplit(x,', '), function(x) paste(sort(x), collapse = ', '), FUN.VALUE =character(1)))]
Run Code Online (Sandbox Code Playgroud)