Я хотел бы заменить минимальное и максимальное значения в столбце предопределенными минимальными и максимальными значениями.

Вот образец набора данных:

ids <- c(1,2,3,4,5,6,7,8,9,10)
scores.a <- c(512,531,541,555,562,565,570,572,573,588)

data <- data.frame(ids, scores.a)

min <- 520
max <- 595

> data
   ids scores.a
1    1      512
2    2      531
3    3      541
4    4      555
5    5      562
6    6      565
7    7      570
8    8      572
9    9      573
10  10      588

Итак, мне нужно заменить 512 на 520 и 588 на 595.

The desired output is:
    > data
       ids scores.a
    1    1      520
    2    2      531
    3    3      541
    4    4      555
    5    5      562
    6    6      565
    7    7      570
    8    8      572
    9    9      573
    10  10      595

Любые идеи?

Благодарность!

1
amisos55 11 Фев 2021 в 00:53

1 ответ

Лучший ответ

Мы создаем логическое условие с range и replace (при условии, что нет связей для min/max

datas$scores.a <- with(data, replace(scores.a, scores.a %in% 
                range(scores.a), c(min, max)))

Если есть ties, вариант case_when

library(dplyr)
data %>%
   mutate(scores.a = case_when(scores.a == min(scores.a) ~ min,
                 scores.a == max(scores.a) ~ max,
                 TRUE ~ scores.a))

-вывод

#   ids scores.a
#1    1      520
#2    2      531
#3    3      541
#4    4      555
#5    5      562
#6    6      565
#7    7      570
#8    8      572
#9    9      573
#10  10      595

ПРИМЕЧАНИЕ. Лучше использовать для объекта другое имя, чем имя функции (min, max).

1
akrun 10 Фев 2021 в 21:55