Как заменить значения некоторых строк значением другого? - PullRequest
1 голос
/ 07 мая 2019

У меня есть такой фрейм данных:

df <- data.frame("F" = c("N°", "X", "X", "Total", "N°", "X", "X", "X", "X", "Total"), "N" = c("6", "123", "123", "123", "8", "123", "123", "123", "123", "123"))

В моем примере «X» - это не настоящая «X», это просто замена того, что может быть в ячейке.

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

И ожидаемый результат:

df <- data.frame("F" = c("N°", "6", "6", "Total", "N°", "8", "8", "8", "8", "Total"), "N" = c("6", "123", "123", "123", "8", "123", "123", "123", "123", "123"))

1 Ответ

1 голос
/ 07 мая 2019

Мы создаем столбец группировки на основе вхождения «N» в столбце F, выполняя кумулятивную сумму логического вектора («grp»), затем replace значения «X» в «F» с помощью first элемент 'N', ungroup и удаление группирующей переменной

library(dplyr)
df %>%
   group_by(grp = cumsum(grepl("^N", F))) %>%
   mutate(F =  replace(as.character(F), 
         !F %in% c("N°", "Total"), first(as.character(N)))) %>%
   ungroup %>%
   select(-grp)
# A tibble: 10 x 2
#   F     N    
#   <chr> <fct>
# 1 N°    6    
# 2 6     123  
# 3 6     123  
# 4 Total 123  
# 5 N°    8    
# 6 8     123  
# 7 8     123  
# 8 8     123  
# 9 8     123  
#10 Total 123  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...