假設你想擁有的數字值,而不是字符column_4你可以做到以下幾點:(帶data.table
)
您的數據(假設爲沒有dput)
dat <- read.table(header = TRUE, text = "
column_1 column_2 column_3
a x 1
b y 2
c z 3
d p 3
e q 4")
column4 <- list(
c("334", "538", "645", "763"),
c("762", "838"),
c("78", "85", "529", "797", "859"),
c("8", "75", "242", "766"),
c("85", "447", "529", "797", "859")
)
結合使用這兩種數據蒸
require(data.table)
column4 <- lapply(column4, as.numeric)
dat <- as.data.table(c(dat, column_4 = list(column4)))
GIV es you
column_1 column_2 column_3 column_4
1: a x 1 334,538,645,763
2: b y 2 762,838
3: c z 3 78, 85,529,797,859
4: d p 3 8, 75,242,766
5: e q 4 85,447,529,797,859
所以這就是我所假設的是你的數據集。要做到排序中的逐一升序不是基於 column_3遵循column_4的工作原理如下
t.data.table <- function(x) {as.data.table(t(x))}
lex_order <- rbindlist(lapply(dat[,column_4], t.data.table), fill=TRUE)
order_base <- c(dat[,list(column_3)], lex_order)
dat[do.call(order, order_base)]
看一看order_base
,看看那裏發生了什麼。
結果如下所示:
column_1 column_2 column_3 column_4
1: a x 1 334,538,645,763
2: b y 2 762,838
3: d p 3 8, 75,242,766
4: c z 3 78, 85,529,797,859
5: e q 4 85,447,529,797,859
這是爲我所用的這個問題,同樣的方法/邏輯:How to sort a list by byte-order for AWS-Calls
在column_4,你有字符值作爲'list'。另外,我認爲你需要'lapply',因爲它是一個'list',儘管它不清楚column_4的順序,因爲它有多個元素。 – akrun
您應該提供輸入數據集,而不是修改後的數據集。也許'df [order(df $ column_3,as.numeric(sapply(df $ column_4,'[',1))),]' – akrun
在你的問題中發佈'dput(df)'的結果。 – jlhoward