Заполните пустые значения в столбце данных по условию - PullRequest
1 голос
/ 27 апреля 2020

У меня есть следующий фрейм данных. Теперь я хочу заполнить пустые значения в «product», определив значения кодов 44 и 90. 44 должно быть «рубашка», а 90 «свитер».

Какой лучший способ сделать это? С чем за l oop?

data = data.frame("code" = c(44,78,21,90,100,44,90), "product" = c("","hat","shoe","","umbrella","",""))
> data
  code  product
1   44         
2   78      hat
3   21     shoe
4   90         
5  100 umbrella
6   44         
7   90      

Ответы [ 2 ]

2 голосов
/ 27 апреля 2020

Используя dplyr, сначала конвертируйте переменную продукта в символ (из фактора), затем используйте case_when

library(dplyr)
data %>% 
  mutate_if(is.factor, as.character) %>% 
  mutate(product = case_when(product == "" & code == 44 ~ "shirt",
                             product == "" & code == 90 ~ "sweater",
                             TRUE ~ product))

  code  product
1   44    shirt
2   78      hat
3   21     shoe
4   90  sweater
5  100 umbrella
6   44    shirt
7   90  sweater

Используя base, та же идея - сначала конвертируйте факторы в символ, а затем используйте ifelse

i <- sapply(data, is.factor)
data[i] <- lapply(data[i], as.character)

data$product[data$product == ""] <- ifelse(data$code[data$product == ""] == 44, "shirt", "sweater")
data
  code  product
1   44    shirt
2   78      hat
3   21     shoe
4   90  sweater
5  100 umbrella
6   44    shirt
7   90  sweater

Также стоит отметить, что если вы используете data.frame с stringsAsFactors = FALSE, то все преобразования коэффициентов становятся ненужными.

1 голос
/ 27 апреля 2020

Вы можете использовать match и использовать индексы для поднабора.

i <- match(data$code, c(44, 90))
j <- !is.na(i)
data$product[j] <- c("shirt", "sweater")[i[j]]
data
#  code  product
#1   44    shirt
#2   78      hat
#3   21     shoe
#4   90  sweater
#5  100 umbrella
#6   44    shirt
#7   90  sweater
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...