一列上的rowSums

时间:2015-04-27 11:00:00

标签: r

问题

是否有一个函数或方法让rowSums只能在一列上工作?

示例数据

col1 <- c(1,2,3)
col2 <- c(1,2,3)
df <- data.frame(col1, col2)

我可以使用rowSums对两行或多行定义的行中的每个值求和:

colsToAdd <- c("col1", "col2")
rowSums(df[,colsToAdd])
[1] 2 4 6 

但是,仅在传递列时

会失败
colsToAdd <- c("col1")
rowSums(df[,colsToAdd])
Error in rowSums(df[, colsToAdd]) : 
  'x' must be an array of at least two dimensions

在查看rowSums()函数时有意义:

> rowSums
function (x, na.rm = FALSE, dims = 1L) 
{
    if (is.data.frame(x)) 
        x <- as.matrix(x)
    if (!is.array(x) || length(dn <- dim(x)) < 2L) 
    ## This line 'stops' the function if only one column is passed

其他信息

用户将在Shiny应用程序中选择列并存储在变量中。然后将此变量传递给rowSums。用户可以选择一列或多列。

我可以构造一个ifelse语句来检查变量的长度,但是想知道是否有更好/更优雅/单行的解决方案,我没有看到?

1 个答案:

答案 0 :(得分:8)

你可以尝试

rowSums(df[,colsToAdd, drop=FALSE])

根据?'['默认情况下,

x[i, j, ... , drop = TRUE]

基于文档

  

drop:对于矩阵和数组。如果为“TRUE”,结果将被强制转换为             尽可能低的维度