2015-09-27 26 views
1

我使用R,並有一個數據框有四列。其中之一是數字,每行中的另一個人有名單:如何通過包含在其中一列中的列表中的值來排序數據框?

column_1 column_2 column_3 column_4 
a   x   1   c("334", "538", "645", "763") 
b   y   2   c("762", "838") 
c   z   3   c("78", "85", "529", "797", "859") 
d   p   3   c("8", "75", "242", "766") 
e   q   4   c("85", "447", "529", "797", "859") 

我想通過數據幀由column_3訂購,並在相同的情況下,在column_4的lexicographcal升序排列。上述

的示例是我的數據幀的外觀後,我使用column_3和column_4如下排序我的數據幀:

df <- df[order(df$column_3, df$column_4),] 

然而,我的期望輸出是行2 3行後應該出現因爲78是小於762.是否有可能這樣做?

+0

在column_4,你有字符值作爲'list'。另外,我認爲你需要'lapply',因爲它是一個'list',儘管它不清楚column_4的順序,因爲它有多個元素。 – akrun

+0

您應該提供輸入數據集,而不是修改後的數據集。也許'df [order(df $ column_3,as.numeric(sapply(df $ column_4,'[',1))),]' – akrun

+1

在你的問題中發佈'dput(df)'的結果。 – jlhoward

回答

1

假設你想擁有的數字值,而不是字符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

相關問題