首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ifelse语句只返回else值(与dplyr的if_else,loop相同)

ifelse语句只返回else值(与dplyr的if_else,loop相同)
EN

Stack Overflow用户
提问于 2020-03-31 00:14:27
回答 1查看 29关注 0票数 0

答案可能不是太牵强,我提前为此道歉。我正在做一个基本的网络抓取练习,基于我在网上找到的代码,但为了让我知道我在写什么,我有自己的想法。我设法添加了一年,数据和总统专栏,但我正在努力添加美国总统的党到我的df。结果总是一样的,所有的总统都被贴上了共和党的标签。

这是我的代码

代码语言:javascript
运行
复制
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语句。

代码语言:javascript
运行
复制
sotu.modern$Party <- ifelse(sotu.modern$President %in% democrats, "Democrats", "Republican")

我尝试使用dplyer的if_else函数&使用经典的if{} else {}循环/函数,但结果总是相同的。

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-31 00:25:23

我运行了你的代码,并查看了unique(sotu.modern$President),看起来每个名字都有一个前导空格,而奥巴马有一个尾随空格:

代码语言:javascript
运行
复制
> 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将其删除。

代码语言:javascript
运行
复制
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
...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60934797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档