Ошибка в `$ <-. Data.frame` (` * tmp * `," Year ", значение = символ (0)): в замене 0 строк, в данных 5 - PullRequest
0 голосов
/ 31 января 2020

Я до сих пор не видел конкретной причины / ответа на этот вопрос, и моя дилемма немного отличается. Поэтому я пытаюсь очистить данные с веб-сайта с помощью функции, которая связывает их с уже найденными данными. Функция вызывает информацию из другой базы данных, в которой 372 человека. Тем не менее, функция всегда останавливается на 48 человек, независимо от того, что я пытаюсь сделать. Судя по трассировке, кажется, что проблема в «Годе», но я не уверен, как это исправить.

Функция:

event_scores <- function(first_name, last_name, id){
  # get url
  url <- paste0('https://thegymter.net/',first_name, '-', last_name, '/')


  all_tables <- url %>% 
    read_html() %>%
    html_nodes(xpath = paste0('//*[@id="post-', id, '"]/div/table')) %>%
    html_table(fill = TRUE)


  # get info table and event table for each athlete
  event_table <- NULL
  for (i in 2:length(all_tables)){
    year_events <- url %>% 
      read_html() %>% 
      html_nodes(xpath = paste0('//*[@id="post-', id, '"]/div/p[', i+1, ']/strong')) %>% 
      html_text()
    all_tables[[i]]$Year = substr(year_events,1,4) # add year of athlete
    all_tables[[i]] <- all_tables[[i]][-1,] 
    event_table <- bind_rows(event_table, all_tables[[i]]) # building dataframe
  }

  # cleaning table
  event_table$ID = id # add id of athlete
  event_table[event_table == '——'] <- NA # remove -- in df

  # column names
  names(event_table)[names(event_table) == "X1"] <- "Date"
  names(event_table)[names(event_table) == "X2"] <- "Competition"
  names(event_table)[names(event_table) == ""] <- "Round" 
  names(event_table)[names(event_table) == "X4"] <- "VT"
  names(event_table)[names(event_table) == "X5"] <- "UB"
  names(event_table)[names(event_table) == "X6"] <- "BB"
  names(event_table)[names(event_table) == "X7"] <- "FX"
  names(event_table)[names(event_table) == "X8"] <- "AA"

  return(event_table)
}

Функция вызова кода:

scores_1 <- NULL

for (i in 1:nrow(dictionary_1)) {
    y <- event_scores(dictionary_1[i,1], dictionary_1[i,2], dictionary_1[i,3])
    scores_1 <- bind_rows(scores_1, y) 
}

Трассировка:

4. stop(sprintf(ngettext(N, "replacement has %d row, data has %d", "replacement has %d rows, data has %d"), N, nrows), domain = NA)
3. `$<-.data.frame`(`*tmp*`, "Year", value = character(0))
2. `$<-`(`*tmp*`, "Year", value = character(0))
1. event_scores(dictionary_1[i, 1], dictionary_1[i, 2], dictionary_1[i, 3])

Отредактировано, чтобы включать:

> dput(dictionary_1[45:50, ])
structure(list(first_n = structure(c(26L, 5L, 218L, 260L, 60L, 
189L), .Label = c("abigail", "ahtziri", "aiko", "akari", "alaina", 
"albena", "aleeza", "alessia", "alexa", "alexandra", "alia", 
"aliaksandra", "alice", "aline", "alison", "alissa", "alisson", 
"alizee", "amaranta", "amelie", "amy", "ana", "ana-luiza", "anapaula", 
"anastasia", "anastasiya", "angel", "anna", "anne", "annie", 
"antonia", "aoka", "arianna", "asia", "asuka", "audrey", "axelle", 
"ayaka", "azumi", "bai", "becky", "bianca", "bianka", "boglarka", 
"breanna", "brittany", "brooklyn", "cagla", "camilla", "camille", 
"carina", "carlotta", "carolann", "carolyne", "casey", "caterina", 
"catherine", "celia", "charlie", "charlotte", "chen", "chiaki", 
"chiara", "chiharu", "chinami", "christina", "cindy", "claire", 
"clara", "clarisse", "claudia", "coline", "csenge", "dalia", 
"daniela", "daniele", "desiree", "dorien", "dorina", "dovelis", 
"du", "elena", "eline", "elisa", "elisabeth", "elizabeth", "ellesse", 
"ellie", "elsa", "emelie", "emily", "emma", "eniko", "enus", 
"erika", "erin", "erja", "fan", "fien", "flavia", "francesca", 
"frida", "gabby", "gaelle", "ganna", "georgia", "georgia-mae", 
"georgia-rose", "georgina", "giada", "giorgia", "grace", "greta", 
"guan", "haley", "halle", "hana", "hanna", "hannah", "helene", 
"helody", "hitomi", "holly", "huang", "ilka", "imogen", "iosra", 
"irene", "isabel", "isabela", "isabelle", "jade", "jasmin", "jelle", 
"jennifer", "jessica", "jimena", "jolie", "jordyn", "julia", 
"julie", "juliette", "jutta", "karla", "kate", "kelly", "kiara", 
"kiko", "kim", "kirsten", "kitti", "kokoro", "kylie", "laney", 
"lara", "larrissa", "latalia", "laura", "lauren", "laurie", "laurie-ann", 
"laurie-lou", "lavinia", "lea", "lea-marie", "leah", "leanne", 
"leticia", "li", "lilla", "lin", "lina", "lisa", "lisa-katharina", 
"liu", "loan", "lorena", "lorette", "lorrane", "louise", "lu", 
"luca", "lucy", "luo", "lyu", "madelaine", "madison", "maegan", 
"maellyse", "mai", "maike", "maily", "maisie", "mana", "manon", 
"mao", "marcia", "margaux", "marina", "marine", "mariya", "marlies", 
"martina", "mary-adny", "mary-anne", "mathilde", "meaghan", "megan", 
"melanie", "michela", "michelle", "micol", "mira", "miriana", 
"mirtill", "nadja", "nagi", "natallia", "natsumi", "nicol", "nicole", 
"nicolle", "nina", "noemi", "noemie", "nora", "olivia", "ondine", 
"oreane", "ou", "pamela", "paulina", "pauline", "phoebe", "qi", 
"quinn", "raer", "raya", "rebeca", "rebecca", "rianna", "romi", 
"rose-kaying", "ruby", "rune", "sabrina", "sae", "sakura", "sara", 
"sarah", "selina", "senna", "shallon", "shang", "shiho", "shoko", 
"sofia", "sophie", "soyoka", "stacy", "stefanie", "stephanie", 
"sydney", "tabea", "taeja", "talia", "tamara", "tan", "tang", 
"tatiana", "tea", "teal", "thais", "thauany", "tunde", "urara", 
"valentina", "valentine", "vanessa", "veronica", "victoria", 
"victoria-kayen", "wakana", "wang", "wei", "wu", "xie", "xu", 
"yao", "yesenia", "yin", "yoana", "youna", "yu", "yuki", "yumika", 
"yumila", "yurika", "zhang", "zhao", "zhou", "zhu", "zoe", "zoja", 
"zsofia"), class = "factor"), last_n = structure(c(111L, 156L, 
343L, 21L, 24L, 34L), .Label = c("abdelaziz", "achampong", "akaho", 
"akyol", "al-salty", "alicke", "alistratava", "allaire-bourgie", 
"almeida", "alt", "andrade", "araujo", "ashikawa", "bacskay", 
"bahl", "banishka", "barbosa", "basile", "beddoe", "berardinelli", 
"bertrandt", "beullens", "bevan", "beydts", "birck", "black", 
"boczogo", "bohmberger", "bonistalli", "bossu", "boumejmajen", 
"bourgeois", "boyer", "brassart", "brevet", "briceno", "brown", 
"bui", "busato", "campagnaro", "campana", "campos", "carofiglio", 
"carvalho", "castro", "cenyu", "cereghetti", "chambellant", "chant", 
"charpy", "chenchen", "chipizubov", "chrobok", "chujun", "chunsong", 
"copiak", "cormoreche", "costa", "croket", "csasztvan", "csillag", 
"cyrenne", "damato", "dandois", "daveloose", "de-jesus-dos-santos", 
"de-jong", "demers", "denommee", "deriks", "derwael", "devai", 
"devillard", "dickson", "diveky", "dowling", "downie", "dufournet", 
"eade", "ecker", "enderle", "enghels", "esparza", "fasana", "feher", 
"fellows", "fenton", "ferlito", "ferrari", "ferrera", "fidelis", 
"folino", "follinger", "fragapane", "friess", "frysak", "fukasawa", 
"gadirova", "garcia", "georgieva", "gill", "godwin", "griesser", 
"grindle", "grisetti", "guerra", "gutierrez", "haase", "hammerle", 
"hanawa", "harodnaya", "harrison", "harrold", "hatakeda", "heduit", 
"hermans", "hernandez", "hill", "hilton", "hinsberger", "his", 
"hockenhull", "hofele", "honti", "horvath", "huan", "huidan", 
"hypolito", "imeraj", "inoue", "iorio", "ishikura", "jakubczyk", 
"james", "jiaqi", "jiaxin", "jieyu", "jin", "jing", "jingxing", 
"jinnan", "jinru", "jochum", "jones", "juk", "jupp", "kajita", 
"kawasaki", "kickinger", "kinsella", "klinckaert", "kovacs", 
"kroll", "kuhm", "kuwajima", "kwan", "lago", "laird", "lanza", 
"lapp", "lastouskaya", "leat", "lechenault", "leliebre", "leolini", 
"lepin", "letrange-mouakit", "levchuk", "leydin", "lima", "linari", 
"linmin", "little", "louon", "lyons", "mader", "madsen", "maggio", 
"makovits", "makra", "malewski", "mandriota", "mannersdorfer", 
"mariani", "marois", "marongiu", "marques", "martin", "mata", 
"matsumura", "mccolgan", "mcdonald", "meixner", "meneghini", 
"merkle", "metelitsa", "methuen", "metzler", "meyers", "miller", 
"minobe", "minotti", "mitchell", "miyakawa", "miyata", "mizzen", 
"modaro", "monckton", "moors", "moreno", "morera", "morffi", 
"morgan", "mori", "morz", "motten", "munteanu", "murakami", "mys", 
"nakaji", "nakamura", "nedov", "netsiazhenka", "oates", "ogawa", 
"oguchi", "oliveira", "olsen", "onyshko", "otaki", "padurariu", 
"passeron", "paterson", "pedersen", "pedro", "peter", "peterman", 
"petz", "philipp", "pikul", "planckeel", "pontlevoy", "praz", 
"qi", "quaas", "ranchova", "rashkova", "redemagni", "regan", 
"reis", "retiz", "ricciardi", "rizzelli", "roberts", "rocca", 
"rocha", "rodriguez", "rogers", "romaeo", "rousseau", "ruckley", 
"ruiyu", "ruoff", "ruttan", "sakaguchi", "sandoval", "saraiva", 
"sasada", "saturnino", "savitskaya", "sayer", "schafer", "scheder", 
"schermann", "schoniger", "schulze", "scott", "seitz", "serber", 
"shijia", "shiting", "simm", "sinmon", "sisi", "siyi", "siyu", 
"skrupa", "smantsar", "soares", "solari", "soloski", "spence", 
"stabinger", "stacey", "stadelmann", "stanhope", "stingl", "sugihara", 
"szekely", "szujo", "teramoto", "terlenghi", "theaker", "thomas", 
"timm", "tingting", "tinkler", "torres", "townsend", "tratz", 
"traukova", "tunney", "turner", "uchiyama", "ugrin", "vaelen", 
"vandamme", "vandenhole", "vandersteen", "vanhille", "vansteenkiste", 
"varabyova", "vargas", "verkest", "verschueren", "versonnen", 
"vezina", "vidiaux", "villa", "vincenzi", "vivian", "voss", "waem", 
"wahl", "whelan", "white", "whitehead", "wimmer", "woo", "xiaofang", 
"xiaoyuan", "xijing", "yakubava", "yamada", "yan", "yankova", 
"yawen", "yi", "yile", "yilin", "young", "yu", "yufei", "yufen", 
"yumoto", "yushan", "zimmermann", "zlatkova"), class = "factor"), 
    ID = c(100752, 21406, 18657, 101150, 118387, 46357)), row.names = 45:50, class = "data.frame")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...