Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
r根据中位数对非零数据进行分类_R - Fatal编程技术网

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