聚合R上的空行

时间:2016-10-03 06:33:05

标签: r

以下是我正在处理的数据样本

Manager  Exp.in.ED  Count.in.ED  Exp.in.NPA  Count.in.NPA
A           12          1          N/A          N/A
B           14          2          N/A          N/A
C           12          1          N/A          N/A
A           43          3          N/A          N/A
B           12          1          N/A          N/A
C           54          4          N/A          N/A
B           23          1          N/A          N/A
A           15          3          N/A          N/A

因此,此数据Exp.in.NPACount.in.NPA为空列。因此,当我尝试使用以下代码聚合它们时

data <- read.csv(file.choose(), header = TRUE)
NPA_exp <- aggregate(data$Exp.in.NPA ~ data$Manager,
                     FUN = sum, na.action = na.pass, na.rm = TRUE)

在控制台中显示

  

FUN中的错误(X [[i]],...):参数的“类型”(字符)无效

并且输出给出一些非空值,而期望的输出是对应于每个Manager的N / A.

但是当我为Exp.in.ED运行相同的代码时,它会给出正确的结果。

1 个答案:

答案 0 :(得分:0)

问题在于N/A被视为character(确切为factor,默认为read.csv)。他们需要转换为NA

这可以通过例如

来完成
data <- data.table::fread("Manager  Exp.in.ED  Count.in.ED  Exp.in.NPA  Count.in.NPA
 A           12          1          N/A          N/A
 B           14          2          N/A          N/A
 C           12          1          N/A          N/A
 A           43          3          N/A          N/A
 B           12          1          N/A          N/A
 C           54          4          N/A          N/A
 B           23          1          N/A          N/A
 A           15          3          N/A          N/A", 
na.strings = "N/A")

print(data)
   Manager Exp.in.ED Count.in.ED Exp.in.NPA Count.in.NPA
1:       A        12           1         NA           NA
2:       B        14           2         NA           NA
3:       C        12           1         NA           NA
4:       A        43           3         NA           NA
5:       B        12           1         NA           NA
6:       C        54           4         NA           NA
7:       B        23           1         NA           NA
8:       A        15           3         NA           NA

现在两个聚合都有效:

aggregate(data$Exp.in.NPA ~ data$Manager,
          FUN = sum, na.action = na.pass, na.rm = TRUE)
  data$Manager data$Exp.in.NPA
1            A               0
2            B               0
3            C               0

aggregate(data$Exp.in.ED ~ data$Manager,
          FUN = sum, na.action = na.pass, na.rm = TRUE)
  data$Manager data$Exp.in.ED
1            A             70
2            B             49
3            C             66