R отображает целые числа с разделителями в строки с разделителями

Вход

У меня есть следующий кадр данных (с истечением срока действия заголовков и фруктами).

введите здесь описание изображения

И у меня есть следующий вектор:

index <- c("apple", "kiwi", "banana", "peach", "grape")

Где яблоко = 1, киви = 2, банан = 3, персик = 4, виноград = 5.

Выход

Я хотел бы получить следующий результат.

введите здесь описание изображения

Как я могу это решить?

Источник данных

myDf <- structure(list(expiry = 20161212:20161215, fruit = structure(c(4L, 
1L, 2L, 3L), .Label = c("2,4", "3,2", "4", "5,3,1"), class = "factor")), .Names = c("expiry", 
"fruit"), class = "data.frame", row.names = c(NA, -4L))


index <- c("apple", "kiwi", "banana", "peach", "grape")

person S12000    schedule 20.12.2016    source источник


Ответы (2)


Вы можете использовать sapply, strsplit и as.numeric, as.character для создания вашей переменной:

myDf$fruit2 <- sapply(as.character(myDf$fruit), function(x) 
  paste0(index[as.numeric(strsplit(x, split = ",")[[1]])], collapse = ", "))
person YCR    schedule 20.12.2016
comment
Большое спасибо за помощь - person S12000; 20.12.2016
comment
Извините, у меня есть еще один вопрос. Будет ли это работать, если мой индекс начинается с 0 вместо 1? Так что в колонке fruit вместо x_i-1 (4 вместо 5... 0 вместо единицы). - person S12000; 20.12.2016
comment
Если ваш индекс начинается с 0, правильно вычесть 0, т. е. иметь index[as.numeric(.)-1] вместо index[as.numeric()]. - person YCR; 20.12.2016

немного более читаемо в tidyverse:

library(dplyr)
library(purrr)

df <- data_frame(expiry=c("20161212", "20161213", "20161214", "20161215"),
                 fruit=c("5,3,1", "2,4", "3,2", 4))

index <- c("apple", "kiwi", "banana", "peach", "grape")

by_row(df, function(x) {

  strsplit(x$fruit, ",")[[1]] %>%
    as.numeric() %>%
    map_chr(~index[.]) %>%
    paste0(collapse=",")

}, .collate="cols", .to="fruit_names") %>%
  select(expiry, fruit=fruit_names)
## # A tibble: 4 × 2
##     expiry              fruit
##      <chr>              <chr>
## 1 20161212 grape,banana,apple
## 2 20161213         kiwi,peach
## 3 20161214        banana,kiwi
## 4 20161215              peach
person hrbrmstr    schedule 20.12.2016
comment
Большое спасибо за помощь - person S12000; 20.12.2016