【问题标题】:R: Ordering specific vars in dataframeR:在数据框中订购特定的变量
【发布时间】:2013-07-11 17:33:56
【问题描述】:

我有一个数据框,其中包含变量 Alpha 到 Zulu,但没有任何特定顺序(例如 Bravo、Yankee、Charlie 等)。我想按字母顺序排列 Delta 到 Whiskey(20 个 vars),其余的保持原样。

例如无序 DF 列名(操作前):Zulu, Bravo, Alpha, Delta, Kilo, Tango, .... Whiskey, Yankee, X-Ray

例如已排序的 DF colnames(操作后):Zulu, Bravo, Alpha, #Start ordered section# Delta, Echo, Fox, Golf, .... Whiskey, #End ordered section# Yankee, X-Ray

我想我已经接近使用 order 命令,但我错过了一些东西......

DF <- DF[ , order( which(names(DF) == 'Delta') : which(names(mitch) == 'Whiskey')) ]

【问题讨论】:

  • 你能举个例子吗?由于变量没有任何特定的顺序,因此一旦您订购了一个子集,就不清楚您将其余部分保持原样是什么意思?让我们说它从“a”到“g” -> f,c,a,d,e,b,g 你想从 b 到 f 排序,那么最终的顺序应该如何?
  • 添加了一个示例,希望它具有说明性。使用您的示例:f,c,a,d,e,b,l,k,m,r,g 变为 f,c,a,d,e,b,g,k,l,m,r。第一个列向量 (f-e) 保持不变,但 bg 变为 brg 在其正确的字母位置。

标签: r


【解决方案1】:

这对我有用:

# Create list of variables to sort
names.DF <- names(DF)

# Find just the variables between the 4th variable ('Delta') and the 23rd variable ('Whiskey') 
ord <- names.DF %in% sort(names.DF)[(which(names.DF=='Delta')):(which(names.DF=='Whiskey'))]

# Replace just the desired variables with the properly sorted variables
names.DF[ord] <- sort(names.DF[ord])

# Use the sorted list to sort the variables in the dataframe
DF <- DF[,names.DF]

此解决方案将根据需要对变量进行排序。它还可以处理 Alpha、Bravo、Charlie、X-ray、Yankee 和 Zulu 与您想要订购的变量混合的情况,而不仅仅是在任一端。例如,

Zulu, Alpha, X-ray, Echo, Whiskey, Delta, Golf, Bravo, Charlie, Yankee

变成

Zulu, Alpha, X-ray, Delta, Echo, Golf, Whiskey, Bravo, Charlie, Yankee

Echo, Zulu, Whiskey, Delta, Alpha, X-ray, Bravo, Charlie, Golf, Yankee

变成

Delta, Zulu, Echo, Golf, Alpha, X-ray, Bravo, Charlie, Whiskey, Yankee

【讨论】:

  • 我在尝试第二行代码时遇到错误argument length of 0...我的数据集一定有问题。
  • 'Delta''Whiskey' 是否可能不完全匹配?例如,不同的大小写或不同的拼写?您可以使用 [(which(toupper(names.DF)=='DELTA')):(which(toupper(names.DF)=='WHISKEY'))],或者如果您知道要使用 26 个中的第 4 个和第 23 个有序变量,则只需将该部分替换为 [4:23]。
猜你喜欢
  • 1970-01-01
  • 2021-05-27
  • 2015-11-16
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 2020-08-10
  • 1970-01-01
  • 2014-02-14
相关资源
最近更新 更多