Как я могу заменить от числа к слову в кадре данных? - PullRequest
0 голосов
/ 03 марта 2019

Я хочу заменить число на слово, которое является фактором.

Пример)

name s1 s2 s3 
A    0       1       2       
B    -2      -1      0
C    0       0       0
D    -1      0       1

результат)

name sample1 sample2 sample3 
A    NO      HIGH    SHIGH       
B    SLOW    LOW     NO
C    NO      NO      NO
D    LOW     NO      HIGH

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Вот вариант, использующий recode_factor

df %>%
    mutate_at(
        vars(starts_with("s")), 
        ~recode_factor(.x, `-2` = "SLOW", `-1` = "LOW", `0` = "NO", `1` = "HIGH", `2` = "SHIGH"))
#  name   s1   s2    s3
#1    A   NO HIGH SHIGH
#2    B SLOW  LOW    NO
#3    C   NO   NO    NO
#4    D  LOW   NO  HIGH

или альтернативно

library(tidyverse)
df %>%
    gather(k, v, -name) %>%
    mutate(v = recode_factor(v, `-2` = "SLOW", `-1` = "LOW", `0` = "NO", `1` = "HIGH", `2` = "SHIGH")) %>%
    spread(k, v)
#  name   s1   s2    s3
#1    A   NO HIGH SHIGH
#2    B SLOW  LOW    NO
#3    C   NO   NO    NO
#4    D  LOW   NO  HIGH

Пример данных

df <- read.table(text =
    "name s1 s2 s3
A 0 1 2
B -2 -1 0
C 0 0 0
D -1 0 1
", header = T)
0 голосов
/ 03 марта 2019

Вы можете сделать это, изменив levels факторного вектора.Пример:

> df <- data.frame(s1 = c(0, -2, 0, -1))
> df$s1 <- as.factor(df$s1)
> levels(df$s1) <- c("SLOW", "LOW", "NO")
> df$s1
[1] NO   SLOW NO   LOW 
Levels: SLOW LOW NO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...