根据顺序不同的字符向量替换数据框中的列名

时间:2019-05-16 11:31:02

标签: r sorting

我的问题是如何在将字符的顺序强加给数据框的同时,基于字符向量重命名列名。我已经阅读了所有类似的帖子,但未回答我的问题。

我正在处理这样的数据框:

df<- data.frame(q3= c(1,4,6,1), q12=c(5,3,2,4), q11=c(1,2,3,4), q1=c(5,6,4,5),q5= c(1,4,6,1), q9=c(5,3,2,4), q10=c(1,2,3,4), q4=c(5,6,4,5),q2= c(1,4,6,1), q7=c(5,3,2,4), q6=c(1,2,3,4), q8=c(5,6,4,5))

理想情况下,我想基于它们的索引(即q1,q3,q78,q99)对这些列进行排序。但是,这似乎很困难。

幸运的是,我还有一个向量,其中包含按顺序排列的列名:

cols<- c("q1", "q2", "q3", "q4","q5", "q6", "q7", "q8","q9", "q10", "q11", "q12")

cols替换数据框列名显然是不正确的,因为它们的顺序不同。所以到目前为止我到达的地方是:

colnames(df) <- match(colnames(df), cols)

df <- df[,order(names(df))]

colnames(df)替换为在col中发现DependencyProperty的位置,但是显然我无法对这些数字进行排序,因为它们不会被R视为整数(由于R不允许数字成为变量名称)。如果可以,则df与cols的顺序相同,而我将替换列名。

我该如何进行这项工作?如果不可能的话,还有什么替代方法?

谢谢。

1 个答案:

答案 0 :(得分:1)

我们可以使用import React, {Component} from 'react'; import logo from './logo.svg'; import './App.css'; import getWeb3 from './utils/getweb3'; import CrowdFundingContract from './contracts/CrowdFunding.json'; class App extends Component { state = {web3: null, accounts: null, contracts: null}; componentDidMount = async () => { try{ const web3 = await getWeb3(); const accounts = await web3.eth.getAccounts(); const networkId = await web3.eth.net.getId(); const deployedNetwork = CrowdFundingContract.networks[networkId]; const instance = new web3.eth.Contract(CrowdFundingContract.abi, deployedNetwork && deployedNetwork.address); this.setState({web3, accounts, contract: instance}, this.runExample); } catch(error){ alert('Failed to load web3, accounts and contract, check the console'); console.error(error); } }; } 对数据框中的列进行重新排序:

cols

这基本上使用df[,cols] 的顺序来重新排序我们的数据框。可以看到如下:

cols

如果我们有一个名为df[,c("B","A")] df[,c("A","B")] 的向量并将其设置为colsc("A","B"),则可以使用此“技巧”来帮助我们对列进行重新排序。