【问题标题】:How to sum numeric values in a character vector?如何对字符向量中的数值求和?
【发布时间】:2014-11-10 11:28:18
【问题描述】:

我有一个数据框,每行包含多个数字。数据框中每一列的数据类型为factor

我的数据框看起来像

> df
           C1
1 1, 14, 1, 4
2           2
3          NA
4     3, 7, 5

现在我想总结df 中每个元素的值。这样我得到了

  Sum
1  20
2   2
3  NA
4  15

我试过strsplit(as.character(df$C1),split=",")。但是我不知道如何构建得到总和......

df <- data.frame(C1= c("1, 14, 1, 4", "2", NA, "3, 7, 5"))

【问题讨论】:

    标签: r string sum


    【解决方案1】:

    使用您的代码:

     sapply(strsplit(as.character(df$C1), split=","),
                           function(x) sum(as.numeric(x)))
     #[1] 20  2 NA 15
    

    或者

    library(splitstackshape)
    Sum1 <- rowSums(cSplit(df, 'C1', sep=','), na.rm=TRUE)
    #Assuming that there is only one column
    Sum1[!Sum1] <- NA
    Sum1
    #[1] 20  2 NA 15
    

    或者也可以这样

    unname(sapply(gsub(",", "+", df$C1),
                function(x) eval(parse(text=x))))
    # [1] 20  2 NA 15
    

    【讨论】:

      【解决方案2】:

      将您的数据转换为 data.frame 并使用rowSums

      rowSums(read.table(text=as.character(df$C1),sep=',',fill=TRUE),na.rm=TRUE)
      
      [1] 20  2  0 15
      

      【讨论】:

        【解决方案3】:

        使用eval parse 的主要是为了有趣的方法:

        unlist(lapply(paste0("c(", as.character(df$C1), ")"), function(x) sum(eval(parse(text=x)))))
        ## [1] 20  2 NA 15
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-01-04
          • 2020-10-18
          • 2021-12-21
          • 2019-09-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-07
          相关资源
          最近更新 更多