2016-07-24 82 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