使用$和列名称向量动态选择数据框列

使用$和列名称向量动态选择数据框列

我希望根据不同的列来订购数据框,一个转弯。我有一个字符向量,其中的相关列名order应该基于:


parameter <- c("market_value_LOCAL", "ep", "book_price", "sales_price", "dividend_yield",

               "beta", "TOTAL_RATING_SCORE", "ENVIRONMENT", "SOCIAL", "GOVERNANCE")

我想循环遍历名称parameter并动态选择要用于order我的数据的列:


Q1_R1000_parameter <- Q1_R1000[order(Q1_R1000$parameter[X]), ]

这里X是1:10(因为我有10个项目parameter)。


为了使我的示例可重现,请考虑mtcars存储在字符向量中的数据集和一些变量名称cols。当我尝试mtcars使用动态子集选择变量时cols,以与上面(Q1_R1000$parameter[X])类似的方式,未选择该列:


cols <- c("cyl", "am")

mtcars$cols[1]

# NULL


鸿蒙传说
浏览 665回答 3
3回答

蓝山帝景

如果我理解正确,你有一个包含变量名称的向量,并希望遍历每个名称并按它们对数据框进行排序。如果是这样,这个例子应该为您说明一个解决方案。你的主要问题(完整的例子不完整,所以我不确定你可能缺少什么)是它应该是,order(Q1_R1000[,parameter[X]])而不是order(Q1_R1000$parameter[X]),因为参数是一个外部对象,包含一个与直接列相对的变量名您的数据框(当$适当时)。set.seed(1)dat <- data.frame(var1=round(rnorm(10)),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;var2=round(rnorm(10)),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;var3=round(rnorm(10)))param <- paste0("var",1:3)dat#&nbsp; &nbsp;var1 var2 var3#1&nbsp; &nbsp; -1&nbsp; &nbsp; 2&nbsp; &nbsp; 1#2&nbsp; &nbsp; &nbsp;0&nbsp; &nbsp; 0&nbsp; &nbsp; 1#3&nbsp; &nbsp; -1&nbsp; &nbsp;-1&nbsp; &nbsp; 0#4&nbsp; &nbsp; &nbsp;2&nbsp; &nbsp;-2&nbsp; &nbsp;-2#5&nbsp; &nbsp; &nbsp;0&nbsp; &nbsp; 1&nbsp; &nbsp; 1#6&nbsp; &nbsp; -1&nbsp; &nbsp; 0&nbsp; &nbsp; 0#7&nbsp; &nbsp; &nbsp;0&nbsp; &nbsp; 0&nbsp; &nbsp; 0#8&nbsp; &nbsp; &nbsp;1&nbsp; &nbsp; 1&nbsp; &nbsp;-1#9&nbsp; &nbsp; &nbsp;1&nbsp; &nbsp; 1&nbsp; &nbsp; 0#10&nbsp; &nbsp; 0&nbsp; &nbsp; 1&nbsp; &nbsp; 0for(p in rev(param)){&nbsp; &nbsp;dat <- dat[order(dat[,p]),]&nbsp;}dat#&nbsp; &nbsp;var1 var2 var3#3&nbsp; &nbsp; -1&nbsp; &nbsp;-1&nbsp; &nbsp; 0#6&nbsp; &nbsp; -1&nbsp; &nbsp; 0&nbsp; &nbsp; 0#1&nbsp; &nbsp; -1&nbsp; &nbsp; 2&nbsp; &nbsp; 1#7&nbsp; &nbsp; &nbsp;0&nbsp; &nbsp; 0&nbsp; &nbsp; 0#2&nbsp; &nbsp; &nbsp;0&nbsp; &nbsp; 0&nbsp; &nbsp; 1#10&nbsp; &nbsp; 0&nbsp; &nbsp; 1&nbsp; &nbsp; 0#5&nbsp; &nbsp; &nbsp;0&nbsp; &nbsp; 1&nbsp; &nbsp; 1#8&nbsp; &nbsp; &nbsp;1&nbsp; &nbsp; 1&nbsp; &nbsp;-1#9&nbsp; &nbsp; &nbsp;1&nbsp; &nbsp; 1&nbsp; &nbsp; 0#4&nbsp; &nbsp; &nbsp;2&nbsp; &nbsp;-2&nbsp; &nbsp;-2
打开App,查看更多内容
随时随地看视频慕课网APP