Оператор ifelse возвращает только значение else (то же самое, что и в ifpelr для dplyr, l oop) - PullRequest
1 голос
/ 30 марта 2020

Ответ, вероятно, не слишком надуман, и я заранее извиняюсь за это. Я делаю базовое c упражнение по поиску в сети, основанное на коде, который я нахожу в Интернете, но со своим собственным поворотом, чтобы я знал, что я пишу. Мне удалось добавить колонку «год, данные и президент», но я изо всех сил пытаюсь добавить партию президента США в свой список. результат всегда один и тот же, все президенты помечены как республиканцы.

Вот мой код

library(rvest)
library(tidyr)
library(dplyr)

pres.library <- read_html(x = "http://stateoftheunion.onetwothree.net/texts/index.html")

links <- pres.library %>%
  html_nodes("#text li a") %>%
  html_attr("href")

text <- pres.library %>%
  html_nodes("#text li a") %>%
  html_text()

sotu <- data.frame (text = text, links = links, stringsAsFactors = F) %>%
  separate(text, c("President", "Date", "Year"), ",")

sotu.modern <- sotu[-c(1:156),]

democrats <- c("Harry S. Truman", "John F. Kennedy", "Lyndon B. Johnson", "Jimmy Carter", "William J. Clinton", "Barack Obama")

и вот выражение ifelse.

sotu.modern$Party <- ifelse(sotu.modern$President %in% democrats, "Democrats", "Republican")

Я пробовал с функцией if_else dplyer и с классом c if {} else {} loop / function, но результат всегда одинаков.

Заранее спасибо

1 Ответ

2 голосов
/ 30 марта 2020

Я запустил ваш код и посмотрел на unique(sotu.modern$President), и похоже, что у каждого имени есть пробел, а у Обамы есть пробел:

> unique(sotu$President)
 [1] " George Washington"     " John Adams"            " Thomas Jefferson"      " James Madison"        
 [5] " James Monroe"          " John Quincy Adams"     " Andrew Jackson"        " Martin van Buren"     
 [9] " John Tyler"            " James Polk"            " Zachary Taylor"        " Millard Fillmore"     
[13] " Franklin Pierce"       " James Buchanan"        " Abraham Lincoln"       " Andrew Johnson"       
[17] " Ulysses S. Grant"      " Rutherford B. Hayes"   " Chester A. Arthur"     " Grover Cleveland"     
[21] " Benjamin Harrison"     " William McKinley"      " Theodore Roosevelt"    " William H. Taft"
...  

Используйте базовую функцию trimws() или stringr::str_trim чтобы удалить.

sotu$President = trimws(sotu$President)
sotu.modern <- sotu[-c(1:156),]
sotu.modern$Party <- ifelse(sotu.modern$President %in% democrats, "Democrats", "Republican")
sotu.modern
sotu.modern
#                President         Date Year         links      Party
# 157      Harry S. Truman   January 21 1946 19460121.html  Democrats
# 158      Harry S. Truman    January 6 1947 19470106.html  Democrats
# 159      Harry S. Truman    January 7 1948 19480107.html  Democrats
# 160      Harry S. Truman    January 5 1949 19490105.html  Democrats
# 161      Harry S. Truman    January 4 1950 19500104.html  Democrats
# 162      Harry S. Truman    January 8 1951 19510108.html  Democrats
# 163      Harry S. Truman    January 9 1952 19520109.html  Democrats
# 164      Harry S. Truman    January 7 1953 19530107.html  Democrats
# 165 Dwight D. Eisenhower   February 2 1953 19530202.html Republican
# 166 Dwight D. Eisenhower    January 7 1954 19540107.html Republican
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...