Определите шаблоны и включите их в новый столбец - PullRequest
0 голосов
/ 18 мая 2018

Я работаю в проекте с большим количеством таблиц, которые хранятся в HTML.В процессе очистки мне приходится иметь дело со следующей проблемой:

Некоторые таблицы, которые я очищаю, выглядят так:

Мне пришлось ввестиПараметр fill = TRUE в этом коде для тех строк, которые являются объединенными ячейками ("курица" и "курица без костей"), в то время как я импортирую DF:

read_html(link) %>%
    html_nodes(node) %>%
    html_table(fill = T, header = T, dec = ",")

, но это сгенерировано длямне такие таблицы:

   df <- data.frame(year = c("chicken",2000,2001,2002,"chicken without bones",2003,2004,2005, "chicken without bones and feet", 2006, 2007, 2008), 
                 weight = c("chicken",5,6,4,"chicken without bones",2,1,3,"chicken without bones and feet", 1, 1.5, 2)
                 )

Пытаясь найти способ, чтобы мои таблицы выглядели так:

df2 <- data.frame(year = c(2000,2001,2002, 2003, 2004, 2005,2006,2007, 2008), number = c(5,6,4,2,1,3,1,1.5, 2), 
                 new_variable = c("chicken","chicken","chicken","chicken without bones","chicken without bones",
                                  "chicken without bones","chicken without bones and feet","chicken without bones and feet","chicken without bones and feet" )
                 )

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

Спасибо за внимание !!

1 Ответ

0 голосов
/ 19 мая 2018

Вы можете попробовать это -

library(dplyr)
library(zoo)

df %>%
  mutate_if(is.factor, as.character) %>%
  mutate(new_variable = ifelse(grepl("\\D+", year), year, NA),
         new_variable = na.locf(new_variable)) %>%
  filter(!grepl("\\D+", year))

Вывод:

  year weight                   new_variable
1 2000      5                        chicken
2 2001      6                        chicken
3 2002      4                        chicken
4 2003      2          chicken without bones
5 2004      1          chicken without bones
6 2005      3          chicken without bones
7 2006      1 chicken without bones and feet
8 2007    1.5 chicken without bones and feet
9 2008      2 chicken without bones and feet

Пример данных:

df <- structure(list(year = structure(c(10L, 1L, 2L, 3L, 11L, 4L, 5L, 
6L, 12L, 7L, 8L, 9L), .Label = c("2000", "2001", "2002", "2003", 
"2004", "2005", "2006", "2007", "2008", "chicken", "chicken without bones", 
"chicken without bones and feet"), class = "factor"), weight = structure(c(8L, 
6L, 7L, 5L, 9L, 3L, 1L, 4L, 10L, 1L, 2L, 3L), .Label = c("1", 
"1.5", "2", "3", "4", "5", "6", "chicken", "chicken without bones", 
"chicken without bones and feet"), class = "factor")), class = "data.frame", row.names = c(NA, 
-12L))

#                             year                         weight
#1                         chicken                        chicken
#2                            2000                              5
#3                            2001                              6
#4                            2002                              4
#5           chicken without bones          chicken without bones
#6                            2003                              2
#7                            2004                              1
#8                            2005                              3
#9  chicken without bones and feet chicken without bones and feet
#10                           2006                              1
#11                           2007                            1.5
#12                           2008                              2
...