R 按照多个定性标准(字母顺序)对数据集重新排序
我在一个列表中有一个数据集,我称之为R 按照多个定性标准(字母顺序)对数据集重新排序,r,R,我在一个列表中有一个数据集,我称之为reord,由521个向量组成。每个向量有14个元素。只有四列(每个向量的元素)对该数据集排序很重要 我想按照这些列的字母顺序创建一个新的数据集:reord[[I]][10]然后reord[[I]][2]然后reord[[I]][3]然后reord[[I]][6] 在第10列中,我们有9个级别:CAD、CHF、…瑞典克朗、美元 在第二列中,我们有3个级别:A、D、Q 在第3列中,我们有6个级别:A、D、I、R、S、T 在第6列中,我们有5个级别:A、B、C、
reord
,由521个向量组成。每个向量有14个元素。只有四列(每个向量的元素)对该数据集排序很重要
我想按照这些列的字母顺序创建一个新的数据集:reord[[I]][10]
然后reord[[I]][2]
然后reord[[I]][3]
然后reord[[I]][6]
- 在第10列中,我们有9个级别:CAD、CHF、…瑞典克朗、美元
- 在第二列中,我们有3个级别:A、D、Q
- 在第3列中,我们有6个级别:A、D、I、R、S、T
- 在第6列中,我们有5个级别:A、B、C、K、U
- 计算机辅助设计
- CAD A B
- 计算机辅助设计
- 计算机辅助设计
- 计算机辅助设计
- CAD A D B
- 计算机辅助设计与开发
- CAD A D K
- 计算机辅助设计
- 瑞士法郎
- 瑞士法郎
- 美元Q T U
reord = list(c("H", "A", "A", "B", "5J", "A", "5J", "A", "TO1", "USD",
"A", "A", "3", "C"), c("H", "D", "R", "B", "5J", "C", "5J", "A",
"TO1", "CAD", "A", "A", "3", "C"), c("H", "A", "I", "B", "5J",
"A", "5J", "A", "TO1", "JPY", "A", "A", "3", "C"), c("H", "A",
"R", "B", "5J", "C", "5J", "A", "TO1", "$TO1+TO1-USD-EUR-JPY-GBP-CHF-CAD-SEK",
"A", "A", "3", "C"), c("H", "D", "I", "B", "5J", "U", "5J", "A",
"TO1", "JPY", "A", "A", "3", "C"), c("H", "A", "D", "B", "5J",
"C", "5J", "A", "TO1", "EUR", "A", "A", "3", "C"), c("H", "D",
"R", "B", "5J", "A", "5J", "A", "TO1", "SEK", "A", "A", "3",
"C"), c("H", "Q", "C", "B", "5J", "B", "5J", "A", "TO1", "USD",
"A", "A", "3", "A"), c("H", "D", "S", "B", "5J", "U", "5J", "A",
"TO1", "JPY", "A", "A", "3", "A"), c("H", "A", "R", "B", "5J",
"U", "5J", "A", "TO1", "SEK", "A", "A", "3", "C"), c("H", "A",
"R", "B", "5J", "B", "5J", "A", "TO1", "$TO1+TO1-USD-EUR-JPY-GBP-CHF-CAD-SEK",
"A", "A", "3", "C"), c("H", "A", "S", "B", "5J", "B", "5J", "A",
"TO1", "JPY", "A", "A", "3", "A"), c("H", "D", "D", "B", "5J",
"U", "5J", "A", "TO1", "JPY", "A", "A", "3", "C"), c("H", "D",
"S", "B", "5J", "A", "5J", "A", "TO1", "$TO1+TO1-USD-EUR-JPY-GBP-CHF-CAD-SEK",
"A", "A", "3", "A"), c("H", "D", "S", "B", "5J", "A", "5J", "A",
"TO1", "GBP", "A", "A", "3", "A"), c("H", "D", "I", "B", "5J",
"K", "5J", "A", "TO1", "CAD", "A", "A", "3", "C"), c("H", "D",
"R", "B", "5J", "K", "5J", "A", "TO1", "CHF", "A", "A", "3",
"C"), c("H", "A", "T", "B", "5J", "K", "5J", "A", "TO1", "JPY",
"A", "A", "3", "A"), c("H", "D", "T", "B", "5J", "U", "5J", "A",
"TO1", "CAD", "A", "A", "3", "A"), c("H", "Q", "C", "B", "5J",
"A", "5J", "A", "TO1", "USD", "A", "A", "3", "A"), c("H", "A",
"D", "B", "5J", "B", "5J", "A", "TO1", "EUR", "A", "A", "3",
"C"), c("H", "A", "S", "B", "5J", "C", "5J", "A", "TO1", "EUR",
"A", "A", "3", "A"), c("H", "D", "D", "B", "5J", "K", "5J", "A",
"TO1", "CAD", "A", "A", "3", "C"), c("H", "D", "R", "B", "5J",
"B", "5J", "A", "TO1", "SEK", "A", "A", "3", "C"), c("H", "D",
"R", "B", "5J", "K", "5J", "A", "TO1", "TO1", "A", "A", "3",
"C"), c("H", "D", "S", "B", "5J", "B", "5J", "A", "TO1", "$TO1+TO1-USD-EUR-JPY-GBP-CHF-CAD-SEK",
"A", "A", "3", "A"), c("H", "D", "S", "B", "5J", "C", "5J", "A",
"TO1", "$TO1+TO1-USD-EUR-JPY-GBP-CHF-CAD-SEK", "A", "A", "3",
"A"), c("H", "D", "I", "B", "5J", "A", "5J", "A", "TO1", "GBP",
"A", "A", "3", "C"), c("H", "A", "D", "B", "5J", "A", "5J", "A",
"TO1", "JPY", "A", "A", "3", "C"), c("H", "A", "D", "B", "5J",
"K", "5J", "A", "TO1", "$TO1+TO1-USD-EUR-JPY-GBP-CHF-CAD-SEK",
"A", "A", "3", "C"))
这是每列的分组元素
##tenth column
tenth = sapply(reord, `[`, 10)
idx10 = split(seq_along(tenth), tenth)
##second column
second = sapply(reord, `[`, 2)
idx2 = split(seq_along(second), second)
##third column
third = sapply(reord, '[', 3)
idx3 = split(seq_along(third), third)
##sixth column
sixth = sapply(reord, '[', 6)
idx6 = split(seq_along(sixth), sixth)
如何获取这种类型的索引以对数据集进行重新排序?谢谢以下功能与问题描述相对应。
如果要排序的列不是问题中的第10、2、3、6列,请重写默认的
cols
参数
fun_order <- function(X, cols = c(10, 2, 3, 6)){
X <- do.call(rbind.data.frame, X)
X[] <- lapply(X, as.character)
names(X) <- seq_along(X)
i <- do.call(order, X[cols])
outcols <- c(cols, seq_len(ncol(X))[-cols])
Y <- X[i, outcols]
row.names(Y) <- NULL
list(index = i, cols = cols, data = Y)
}
fun_order(reord)
fun\u您说您有一个data.frames列表。您发布的列表是一个向量列表,而不是data.frames.correct,我在更改它。这是在返回fun_order函数中的:“X[,10]中的错误:维数不正确”。在fun_order2中,它返回给我:“do.call(oreder,X[cols]中的错误):第二个参数必须是列表。因此它不起作用。我认为这可能适用于数据帧,但列表的索引不同。这很好,但最重要的是我需要行的索引,以便对数据集进行排序。您能为其添加索引吗?thanks@Carlo现在,输出是一个带有成员索引的命名列表
,cols
和data
,重新排序的数据集。如果您只需要索引,只需注释掉最后一行并返回i
。非常感谢!