2017-03-31 74 views
0

這是一個奇怪的請求,但我有一個特定的需求,我試圖解決。R - 手動更改列號位置

讓我們假裝我有一個50列的數據框。每列的列號(或索引)將分別爲1:50。有沒有一種方法可以爲每個50分配新的列號?假設我想讓第一列的列號是187.這可能嗎?

我有一個預測模型,它在構建時記住了用於構建模型的每個變量的列位置,而不是變量名稱。在我的原始數據集中,我有1,559個變量來構建模型,但只有50個被選爲最終模型的一部分。該模型記住每個變量位置作爲1,559的函數,但是當我去評分新數據時,它正在尋找1559個變量,而不僅僅是我帶入我的得分環境的50個變量。

我已經保存了每個變量的原始位置編號,所以我希望我可以將列編號分配給只有50個變量的數據集。我有一個解決方法,我用1559列構建一個大的空數據框,然後將數據放入正確的列#然後對數據進行評分,但在這種情況下,我有300萬條記錄要評分,而我沒有足夠的RAM建立一個3M行,1559列數據幀。

+0

在理論上並沒有什麼東西做的,比如阻止你, 'name(mtcars)[1] < - 「187」'並通過'mtcars [,「187」]提取該列,但這是不是數字,而是字符串。 –

+0

@ WeihuangWong是的,我明白這將改變列的名稱,但不更新實際的列索引號。也許它不可能告訴R列索引#是它實際上不是。 –

回答

0

您可以直接通過data[,c(ORDER YOU WANT THEM TO BE IN)]

例如更改列位置:

head(cars)

head(cars[,c(2,1)])

+0

你一定沒有看過我的問題,那不是我想要做的。我不想取50個變量並對它們進行重新排序,我想要一個包含50個變量的數據框,但是讓R認爲變量1是列#150,變量2是列#276等。最終的結果是,我可以手動分配列#位置,即使這些位置不存在。 –

+0

你一定沒有考慮過我的答案,因爲這正是你應該試圖做的。 您應該重新考慮嘗試「讓R認爲變量1是列150」,並將變量1指定爲列150.這將使R認爲變量1是列150,因爲變量1是列150. – GlennFriesen

+0

對不起,Glenn,但我們仍然不在同一頁面上。我不想重新排列我的變量,這是一項基本任務。你錯過了我只有50個變量的數據集的部分,所以變量150根本不存在。但是我想讓R認爲第一個變量的列索引是150。 –