Как я могу заменить целое значение строки строки другим значением в r - PullRequest
1 голос
/ 25 сентября 2019

Таблица, которая у меня есть, как показано ниже, например;

    V1
  hello
   name
    age
    hey
  apron
 street
  night
   soap

предположим, что я хочу заменить имена строк, начиная с "a" на 1, "h" на 2, "s" на 3 и "n" на 4, как мне это сделать.

Я хочу, чтобы вывод выглядел как

   V1
    2
    4
    1
    2
    1
    3
    4
    3

Ответы [ 3 ]

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

Мы можем использовать substring для получения первого символа, а затем использовать case_when для присвоения значений.

library(dplyr)

df %>%
  mutate(first_char = substring(V1, 1, 1), 
          new_V1 = case_when(first_char == "a" ~ 1, 
                             first_char == "h" ~ 2, 
                             first_char == "s" ~ 3, 
                             first_char == "n" ~ 4, 
                             TRUE ~ NA_real_))


#      V1 first_char new_V1
#1  hello          h      2
#2   name          n      4
#3    age          a      1
#4    hey          h      2
#5  apron          a      1
#6 street          s      3
#7  night          n      4
#8   soap          s      3
0 голосов
/ 25 сентября 2019

Проверьте ответ ниже.Он извлекается из базовой функции startsWith() и использует dplyr для манипулирования данными с использованием case_when и mutate.Удачи вам и добро пожаловать в StackOverflow.

library(dplyr)

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

colnames(df) = 
  "V1"

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
1  2
2  4
3  1
4  2
5  1
6  3
7  4
8  3

Если вы хотите заменить более одной буквы одним номером, просто добавьте новую букву иукажите номер, на который вы хотите его изменить, не боясь выдать ошибку.В приведенном ниже коде я просто изменил числовое значение, связанное с 'h', с '3' на '1':

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

Output:

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

Чтобы поиграть с последовательностями букв, используйте встроенный набор данных, известный какletters.

Затем вы можете использовать что-то вроде

 letters[1:4]
[1] "a" "b" "c" "d"
0 голосов
/ 25 сентября 2019

Вы можете использовать следующий код:

# Define the word vector
words=c("hello","name","age","hey","apron","street","night","soap")

# Define a translation list: first letter -> number
translation=list("a"=1,"h"=2,"s"=3,"n"=4)

# Select the corresponding elements in translation list
# Unlist to have a vector
unlist(translation[substr(words,0,1)])

#Output:
> h n a h a s n s 
> 2 4 1 2 1 3 4 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...