2016-07-24 84 views
0

我想創建不同列的總和。在那裏我有一個for循環,創建一個列的名稱,並提取總和。粘貼列表的值以獲得列的總和值

虛擬數據是這樣的:

row1 <- c(1,2,3) 
row2 <- c(23,3,4) 

df <- data.frame(row1, row2) 

我想創造這樣的事情:\

list <- c("row1", "row2") 

for (i in 1:2){ 

    name <- list[i] 
    var <- paste0("df$", name) 

    x <- sum(var) 
    print(x) 

} 

然而,這引發以下錯誤:

Error in sum(x) : invalid 'type' (character) of argument 

有什麼想法我出錯的地方

+1

更標準的方法是使用子集,而'colSums'。例如'lst <-c(「row1」,「row2」); colSums(dat [lst])'(ps。我把你的例子中的'df'和'list'分別改爲'dat'和'lst',因爲它們都是R函數名稱) – user20650

回答

0

我不知道任何方式將字符串'df$row1'轉換爲具有所需含義的變量df$row1。但是,您可以直接訪問df的列,使用該數據框中的名稱以及R的列表命名語法。以下一行將打印出list載體中出現的每個列名的總和。

sapply(list, function(x) print(sum(df[[x]]))) 

輸出:

[1] 6 
[1] 30 
row1 row2 
    6 30