r根据中位数对非零数据进行分类
我的数据集如下所示r根据中位数对非零数据进行分类,r,R,我的数据集如下所示 ID Quantity 1 0.93 2 0.17 3 NA 4 0.44 5 NA 6 0.86 7 0.07 8 0.23 9 1.00 现在,我想将“数量”列中的所有非零/非NA数据分类为中值。“NA”应视为“0”。因此,对于上述数据中位数为“0.44”,因此,最终数据集应如下所示: ID Quantity Quantity_median 1 0.93 >0.44 2 0.17 &
ID Quantity
1 0.93
2 0.17
3 NA
4 0.44
5 NA
6 0.86
7 0.07
8 0.23
9 1.00
现在,我想将“数量”列中的所有非零/非NA数据分类为中值。“NA”应视为“0”。因此,对于上述数据中位数为“0.44”,因此,最终数据集应如下所示:
ID Quantity Quantity_median
1 0.93 >0.44
2 0.17 <=0.44
3 NA 0
4 0.44 <=0.44
5 NA 0
6 0.86 >0.44
7 0.07 <=0.44
8 0.23 <=0.44
9 1.00 >0.44
由于可能的级别数只有3个,因此您可以尝试以下方法:
library(dplyr)
df %>% mutate(Qmedian = median(Quantity, na.rm = TRUE)) %>%
mutate(Quantity_median = as.factor(case_when(
is.na(Quantity) ~ "0",
Quantity <= Qmedian ~ paste0("<=", Qmedian),
Quantity >= Qmedian ~ paste0(">", Qmedian)
))) %>%
select(-Qmedian)
# ID Quantity Quantity_median
# 1 1 0.93 >0.44
# 2 2 0.17 <=0.44
# 3 3 NA 0
# 4 4 0.44 <=0.44
# 5 5 NA 0
# 6 6 0.86 >0.44
# 7 7 0.07 <=0.44
# 8 8 0.23 <=0.44
# 9 9 1.00 >0.44
由于可能的级别数只有3个,因此您可以尝试以下方法:
library(dplyr)
df %>% mutate(Qmedian = median(Quantity, na.rm = TRUE)) %>%
mutate(Quantity_median = as.factor(case_when(
is.na(Quantity) ~ "0",
Quantity <= Qmedian ~ paste0("<=", Qmedian),
Quantity >= Qmedian ~ paste0(">", Qmedian)
))) %>%
select(-Qmedian)
# ID Quantity Quantity_median
# 1 1 0.93 >0.44
# 2 2 0.17 <=0.44
# 3 3 NA 0
# 4 4 0.44 <=0.44
# 5 5 NA 0
# 6 6 0.86 >0.44
# 7 7 0.07 <=0.44
# 8 8 0.23 <=0.44
# 9 9 1.00 >0.44
我们也可以用cut
我们也可以用cut
尝试使用cut和Quantity,我看不出0.44是该列的中位数,或者删除NA值,或者将其替换为0。您可以通过quantiledf1$Quantity进行检查,NA.rm=TRUE[3]@TimBiegeleisen我正在删除NA值这基本上只是dat$Quantity>0.44,添加了一些标签。尝试使用cut和Quantile,我看不出0.44是该列的中位数,要么删除NA值,要么用0替换。您可以通过quantiledf1$Quantity进行检查,NA.rm=TRUE[3]@TimBiegeleisen我正在删除NA值这基本上只是dat$Quantity>0.44,添加了一些标签。这非常完美@MKR这非常完美@MKR