为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

鸿蒙传说 2019-05-25 15:46:50
使用$和列名称向量动态选择数据框列我希望根据不同的列来订购数据框,一个转弯。我有一个字符向量,其中的相关列名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
查看完整描述

3 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

如果我理解正确,你有一个包含变量名称的向量,并希望遍历每个名称并按它们对数据框进行排序。如果是这样,这个例子应该为您说明一个解决方案。你的主要问题(完整的例子不完整,所以我不确定你可能缺少什么)是它应该是,order(Q1_R1000[,parameter[X]])而不是order(Q1_R1000$parameter[X]),因为参数是一个外部对象,包含一个与直接列相对的变量名您的数据框(当$适当时)。


set.seed(1)

dat <- data.frame(var1=round(rnorm(10)),

                   var2=round(rnorm(10)),

                   var3=round(rnorm(10)))

param <- paste0("var",1:3)

dat

#   var1 var2 var3

#1    -1    2    1

#2     0    0    1

#3    -1   -1    0

#4     2   -2   -2

#5     0    1    1

#6    -1    0    0

#7     0    0    0

#8     1    1   -1

#9     1    1    0

#10    0    1    0


for(p in rev(param)){

   dat <- dat[order(dat[,p]),]

 }

dat

#   var1 var2 var3

#3    -1   -1    0

#6    -1    0    0

#1    -1    2    1

#7     0    0    0

#2     0    0    1

#10    0    1    0

#5     0    1    1

#8     1    1   -1

#9     1    1    0

#4     2   -2   -2


查看完整回答
反对 回复 2019-05-25
  • 3 回答
  • 0 关注
  • 657 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信