2017-07-12 83 views
-1

我有兩列數字數據,我想插入第三列求和它們。很簡單,但我想在做任何事情之前將總和分配給一個變量(長話短說:這些列名將一直改變[下個月它們可能是Col4Col5,例如],這是代碼這將被其他人使用,如果我可以將它放在頂端,我不希望這個關鍵步驟深埋在代碼中)。下面是我得到了什麼:作爲字符變量存儲矢量操作

sumColumn <- "df$Col1 + df$Col2" 
df <- cbind(data.frame("Col1"=2:5, "Col2"=5:8)) 
df$Col3 <- sumColumn 
df 

顯然,它返回:

Col1 Col2    Col3 
1 2 5 df$Col1 + df$Col2 
2 3 6 df$Col1 + df$Col2 
3 4 7 df$Col1 + df$Col2 
4 5 8 df$Col1 + df$Col2 

我正在尋找的是這樣的:

Col1 Col2 Col3 
1 2 5 7 
2 3 6 9 
3 4 7 11 
4 5 8 13 

有什麼我可以做帶第三行將強制變量,或某種方式來創建變量,以便它將按照我想要的方式進行解釋?感謝您的任何幫助!

+0

最好是兩個變量的名稱保存到一個字符向量。 'myCols < - c(「Col1」,「Col2」)'。然後使用'df $ newCol < - rowSums(df [myCols])'。比使用eval/parse範例更容易存儲和更新,並將整個解析存儲在列中。 – lmo

+0

晚期隨訪,但這工作完美。謝謝! – ThingyBlahBlah3

回答

1

你需要

df$Col3 = eval(parse(text=sumColumn)) 
+0

這是不好的做法。 OP不應該存儲一個字符串,而是一個表達式(可能bquote可能對OP有用)。然後可以評估表達式。 – Roland

+0

@Roland你能否提供一個參考資料來解釋不這樣做的原因? – G5W

+1

fortune包中的引號集合中有一個條目。主要的問題是這樣的結構很慢,難以閱讀和理解(很難維護這樣的代碼),如果出現錯誤,會給出模糊的錯誤消息,並妨礙您作爲R程序員的發展。 R支持表達式的存儲和評估,並且可以對這些語言進行計算。 – Roland

1

您可以通過使用df[,"name"]語法他們的名字引用列,例如:

df$Col3 <- df[,'Col1'] + df[,'Col2'] 

所以,如果你有變量的列名n1n2,你可以這樣做:

df$Col3 <- df[,n1] + df[,n2] 

n1 <- 'Col1'n2 <- 'Col2'定義在您的程序的頂部, 如果後面的列名稱在您的數據框中發生變化,您可以將c: 請更改n1n2的值,並且程序將繼續使用新名稱。