Как выбрать и заменить несколько значений символьной переменной, используя ее начальную букву с номером в r - PullRequest
0 голосов
/ 25 сентября 2019

Это мой набор данных со следующими значениями:

df=as.data.table(c("hello","name","age","hey","apron","street","night","soap"))

colnames(df)="V1"

Output:

  V1
1  2
2  4
3  1
4  2
5  1
6  3
7  4
8  3

Это делается только для 1 буквы, т. Е. A или h или s или n

df %>%
  mutate(V1 = case_when(startsWith(df$V1, "a") == TRUE~ '1',
                        startsWith(df$V1, "h") == TRUE~ '2',
                        startsWith(df$V1, "s") == TRUE~ '3',
                        startsWith(df$V1, "n") == TRUE~ '4'))

      V1 V2
1  hello  2
2   name  4
3    age  1
4    hey  2
5  apron  1
6 street  3
7  night  4
8   soap  3

Я хочу заменить несколькозначения: например, я хочу заменить слова в диапазоне ах на 1 Здесь я получаю значения NA вместо

df %>%
  mutate(V2 = case_when(startsWith(df$V1, letters[1:8]) == TRUE~ '1',
                        startsWith(df$V1, "s") == TRUE~ '3',
                        startsWith(df$V1, "n") == TRUE~ '4'))

      V1   V2
1  hello <NA>
2   name    4
3    age <NA>
4    hey <NA>
5  apron <NA>
6 street    3
7  night    4
8   soap    3

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

Использование подхода regex

df%>%mutate(V2 = case_when(grepl("^[a-h].*",V1)~"1",
                           grepl("^s.*",V1)~"3",
                           grepl("^n.*",V1)~"4"))

      V1 V2
1  hello  1
2   name  4
3    age  1
4    hey  1
5  apron  1
6 street  3
7  night  4
8   soap  3
0 голосов
/ 25 сентября 2019
library(dplyr)
df %>%
  mutate(V2 = case_when(substr(V1, 1, 1) %in% letters[1:8] ~ "1",
                        substr(V1, 1, 1) == "s" ~ "3",
                        substr(V1, 1, 1) == "n" ~ "4"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...