R: преобразование степени алфавита в коэффициент - PullRequest
0 голосов
/ 27 июня 2018

так что у меня есть группа данных с оценками от A + до F (и 99 не знаю, почему это там)

я пытаюсь преобразовать A + ~ B0 в "высокий" и C + ~ F в "низкий"

У меня есть столбец «result» со списком данных алфавита.

Я создаю еще один столбец "класс" в фактор "высокий" "низкий"

raw.tidy$grade <- raw.tidy$result(high = c("A+", "A0", "B+", "B0"),
                                  low = c("C+", "C0", "D+", "D0", "F", "99"))

это код, который я использую, но это дает Ошибка: попытка применить не-функцию ошибка.

Я проверил другие вопросы и могу конвертировать A + в A + и C0 в C0, но я не могу понять, как конвертировать A + и A0 в "high".

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

Вы можете использовать findInterval функцию:

vec = c("D+", "A0", "F", "D0", "99", "B0", "B+", "C+", "C0", "A+")

c("High","Low")[findInterval(vec>"C"|vec=="99",0:1)]

[1] "Low"  "High" "Low"  "Low"  "Low"  "High" "High" "Low"  "Low"  "High"

или даже

factor(findInterval(vec>"C" | vec == "99", 0:1 ), label = c("High","Low"))

[1] Low  High Low  Low  Low  High High Low  Low  High
Levels: High Low

если у вас есть фрейм данных:

df = data.frame(result=vec,stringsAsFactors=FALSE)

transform(df,grade=factor(findInterval(result>"C"|result=="99",0:1),label=c("High","Low")))
   result grade
1      D+   Low
2      A0  High
3       F   Low
4      D0   Low
5      99   Low
6      B0  High
7      B+  High
8      C+   Low
9      C0   Low
10     A+  High

Ю может посмотреть демоверсию здесь

0 голосов
/ 27 июня 2018

с базой R

high = c("A+", "A0", "B+", "B0")

low = c("C+", "C0", "D+", "D0", "F", "99")


df$grade <- factor(ifelse(df$result %in% high, "high","low"))
0 голосов
/ 27 июня 2018

Вы можете использовать функцию case_when() из пакета dplyr.

library(dplyr)

df <- tibble(
  result = c("A+", "B0", "D+", "F", "A0", "99", "C+", "A+", "C0", "D0")
)

df %>% 
  mutate(grade = factor(case_when(
    result %in% c("A+", "A0", "B+", "B0") ~ "high",
    result %in% c("C+", "C0", "D+", "D0", "F", "99") ~ "low"
  )))

# A tibble: 10 x 2
   result grade
   <chr>  <fct>
 1 A+     high 
 2 B0     high 
 3 D+     low  
 4 F      low  
 5 A0     high 
 6 99     low  
 7 C+     low  
 8 A+     high 
 9 C0     low  
10 D0     low  

Подробнее о case_when см. Документацию на веб-сайте tidyverse.org.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...