Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 按照多个定性标准(字母顺序)对数据集重新排序_R - Fatal编程技术网

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

每个列都将设置一个组。第10列更重要(设置主顺序),第2列紧跟第10列(设置第二顺序),第3列紧跟第2列(设置第三顺序),第6列紧跟第3列(设置第四顺序)

我正在寻找的输出索引示例(用于对原始数据集进行重新排序):

  • 计算机辅助设计
  • 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
。非常感谢!