错误-x应该是数据框中的数字

时间:2018-02-13 16:39:01

标签: r excel

我的数据集如下:

name state  num1 num2 num3
abc    rt    10   40   8
def    ka    20   50   15
ert    pn    30   60   16

我想要每行的行数。虽然使用rowums(数据),但它抛出像x这样的错误应该是数字。所以新列应该是num1,num2和num3

的总和

1 个答案:

答案 0 :(得分:1)

一些suuggestd解决方案。但是,首先,一如既往地创建一些日期,

dta <- structure(list(name = structure(1:3, .Label = c("abc", "def", 
"ert"), class = "factor"), state = structure(c(3L, 1L, 2L), .Label = c("ka", 
"pn", "rt"), class = "factor"), num1 = c(10L, 20L, 30L), num2 = c(40L, 
50L, 60L), num3 = c(8L, 15L, 16L)), .Names = c("name", "state", 
"num1", "num2", "num3"), class = "data.frame", row.names = c(NA, 
-3L))

其次,几乎总是显示数据,

dta
#>   name state num1 num2 num3
#> 1  abc    rt   10   40    8
#> 2  def    ka   20   50   15
#> 3  ert    pn   30   60   16

或许也可以使用str(),因为它与此处了解spciac问题相关,

str(dta)
#> 'data.frame':    3 obs. of  5 variables:
#>  $ name : Factor w/ 3 levels "abc","def","ert": 1 2 3
#>  $ state: Factor w/ 3 levels "ka","pn","rt": 3 1 2
#>  $ num1 : int  10 20 30
#>  $ num2 : int  40 50 60
#>  $ num3 : int  8 15 16

问题起因于数据是因素和整数的混合,不加思索地我们无法求和因子

现在解决一些问题。

首先,akrun's first solution

rowSums(dta[grep("num\\d+", names(dta))])
#> [1]  58  85 106

其次,Renu's solution

rowSums(dta[,sapply(dta, is.numeric)])
#> [1]  58  85 106

第三,akrun's second solution的轻微改写版本,

# install.packages(c("tidyverse"), dependencies = TRUE)
library(tidyverse)
dta %>% select(matches("num\\d+")) %>% mutate(rowsum = rowSums(.))
#>   num1 num2 num3 rowsum
#> 1   10   40    8     58
#> 2   20   50   15     85
#> 3   30   60   16    106

最后,这个很好的选项,

# install.packages(c("plyr"), dependencies = TRUE)
plyr::numcolwise(sum)(dta)
#>   num1 num2 num3
#> 1   60  150   39

最后,here a almost identical question。现在他们至少没有联系。