Поиск значений в ячейке в R - PullRequest
0 голосов
/ 21 февраля 2020

Я хотел бы посмотреть значения для отдельных идентификаторов, разделенных запятыми в каждой ячейке столбца.

Данные (df) выглядят так:

  products
1 1,3,5
2 1,2
3 3
4 NA
5 4,5

Я хотел бы искать значения для каждого числа из разных df (df1) и получать результат следующим образом:

  products
1 apple, carrot, pear
2 apple, peach
3 carrot
4 NA
5 tomato, pear

Есть ли простой способ сделать это в R? Спасибо за любые предложения.

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Предполагая, что у вас есть кадр данных для поиска, подобный следующему:

df1 <- data.frame(products = 1:5, 
           value = c('apple', 'peach', 'carrot', 'tomato', 'pear'))

Мы можем поместить значение, разделенное запятыми, в отдельные строки, а затем объединить с df1 на products и суммировать value в одну строку через запятую с toString.

library(dplyr)

df %>%
  mutate(row = row_number()) %>%
  tidyr::separate_rows(products, sep = ",", convert = TRUE) %>%
  left_join(df1, by = 'products') %>%
  group_by(row) %>%
  summarise(value = toString(value)) %>%
  select(-row)


# A tibble: 5 x 1
#  value              
#  <chr>              
#1 apple, carrot, pear
#2 apple, peach       
#3 carrot             
#4 NA                 
#5 tomato, pear       

data

df <- structure(list(products = structure(c(2L, 1L, 3L, NA, 4L), .Label = c("1,2", 
"1,3,5", "3", "4,5"), class = "factor")), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5"))
0 голосов
/ 21 февраля 2020
df=read.table(text="
products
1 1,3,5
2 1,2
3 3
4 NA
5 4,5",h=T)

df1=data.frame(id=1:5,name=c("apple","peach","carrot","tomato","pear"))

data.frame(products=
  apply(df,1,function(x){
    paste0(df1$name[match(as.numeric(unlist(strsplit(as.character(x),","))),df1$id)],collapse=", ")
  })
)
             products
1 apple, carrot, pear
2        apple, peach
3              carrot
4                  NA
5        tomato, pear
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...