Использование dplyr для изменения значений под порогом в указанных c столбцах - PullRequest
0 голосов
/ 18 апреля 2020

Здравствуйте, у меня есть фрейм данных, такой как:

dt <- data.frame(Col1 = c("A", "B", "C", "D", "E", "F"),
                 Col2 = c(0.04, 0.03, 0.003, 0.43, 0.47, 0.0009),
                 Col3 = c(34, 23, 23, 34, 1, 2))
  Col1   Col2 Col3
1    A 0.0400   34
2    B 0.0300   23
3    C 0.0030   23
4    D 0.4300   34
5    E 0.4700    1
6    F 0.0009    2

И я хотел бы использовать dplyr в ordrer для:

1) Заменить в Col2 каждое значение <0,05 на X & каждое значение => 0,05 по Z 2 Замените в Col3 каждое значение <5 по Y & каждое значение => 5 по W

Я должен получить:

Col1 Col2 Col3
A X W
B X W
C X W 
D Z W
E Z Y
F X Y

Спасибо за ваш помощь

Ответы [ 2 ]

2 голосов
/ 18 апреля 2020

Попробуйте:

dt %>% mutate(Col2 = case_when(Col2 < 0.05 ~ "X",
                               Col2 >= 0.05 ~ "Z"),
              Col3 = case_when(Col3 < 5 ~ "W",
                              Col3 >=5 ~ "Y")) 
0 голосов
/ 18 апреля 2020

Мы можем использовать Map в base R

dt[2:3] <-  Map(function(x, y, z) ifelse(x > y, z[2],
        z[1]), dt[2:3], c(0.05, 5), list(c('X', 'Z'), c('Y', 'W')))

dt
#  Col1 Col2 Col3
#1    A    X    W
#2    B    X    W
#3    C    X    W
#4    D    Z    W
#5    E    Z    Y
#6    F    X    Y
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...