我已经过滤了数据,其中一列具有5个因子水平,我想获取每个因子水平的总和。
我正在使用以下代码
levels(df_Temp$ATYPE)
[1] "a" "b" "c" "d" "Unknown"
我正在使用以下代码
cast(df_Temp,ATYPE~AFTER_ADM, sum, value = "CHRGES")
但是我得到的输出如下
ATYPE 0 1
1 a 0 2368968.39
2 b 0 3206567.47
3 c 0 19551.19
4 e 0 2528688.12
我想要所有因子水平,对于那些缺失的因子水平数据求和为“ 0”。
所以期望的输出是
ATYPE 0 1
1 a 0 2368968.39
2 b 0 3206567.47
3 c 0 19551.19
4 d 0 0
5 e 0 2528688.12
答案 0 :(得分:2)
使用rgba(255,255,255,0.001)
transparent
-webkit-linear-gradient
中的xtabs
base R
xtabs(CHRGES ~ ATYPE + AFTER_ADM, subset(df_Temp, ATYPE != "e"))
# AFTER_ADM
#ATYPE 0 1
# a 0.00000000 -5.92270971
# b -1.68910431 0.05222349
# c -0.26869311 0.16922669
# d 1.44764443 -1.59011411
# e 0.00000000 0.00000000
答案 1 :(得分:1)
如果我正确理解了您的问题,则可以使用dplyr
。首先,我创建了一个示例数据集:
set.seed(123)
x <- sample(letters[1:5], 1e3, replace = T)
x[x == "e"] <- "Unknown"
y <- sample(1:100, 1e3, replace = T)
df1 <- data.frame(ATYPE = factor(x), AFTER_ADM = y)
df1$AFTER_ADM[df1$ATYPE == "Unknown"] <- NA
head(df1, 10)
ATYPE AFTER_ADM
1 b 28
2 d 60
3 c 17
4 Unknown NA
5 Unknown NA
6 a 48
7 c 78
8 Unknown NA
9 c 7
10 c 45
然后使用group_by
进行汇总以获得总和和计数。我不确定您是否希望获得因子水平的计数,但是如果您不感兴趣,很容易取出:
library(dplyr)
df1 %>%
group_by(ATYPE) %>%
summarise(sum_AFTER_ADM = sum(AFTER_ADM, na.rm = T),
n_ATYPE = n())
# A tibble: 5 x 3
ATYPE sum_AFTER_ADM n_ATYPE
<fct> <int> <int>
1 a 10363 198
2 b 11226 206
3 c 9611 203
4 d 9483 195
5 Unknown 0 198
答案 2 :(得分:1)
使用dplyr
和tidyr
的另一种可能的解决方案。从两个软件包中使用count和complete将有助于解决您的问题。
library(dplyr)
library(tidyr)
#using iris as toy data
iris2 <- iris %>%
filter(Species != "setosa")
#count data and then fill n with 0
ir3 <- count(iris2, Species) %>%
complete(Species, fill = list(n =0))