我怎样才能实现这个 IF 条件?
How can I implement this IF condition?
我正在使用 R 从网页上抓取 Table。我的问题是网页上的 table 列之一在这两个名称之间随机更改其 header 名称:“住宿类型”和“房间类型”。
因此,如果我不希望我的 R 脚本在到达特定代码行时中断,我需要手动检查网页并相应地更正我的 R 代码。
这是代码(当该列标题为“住宿类型”时):
output31 <- output3 %>% mutate_at(c("Accommodation Type", "Price for 1 week"), ~str_extract(., ".*\n"))
这是代码(当该列标题为“房间类型”时):
output31 <- output3 %>% mutate_at(c("Room type", "Price for 1 week"), ~str_extract(., ".*\n"))
有没有办法插入一种 IF 条件,其逻辑是如果发现“住宿类型”作为列标题,则必须忽略提到“房间类型”的那行代码,反之亦然反过来?
编辑(添加了完整代码):
library(rvest)
library(dplyr)
library(stringr)
if (!require(tables)) install.packages('tables')
library(tables)
library(xlsx)
url3 <- read_html("https://www.booking.com/hotel/mu/lux-grand-baie-resort-amp-residences.en-gb.html?aid=356980&label=gog235jc-1DCAsonQFCE2hlcml0YWdlLWF3YWxpLWdvbGZIM1gDaJ0BiAEBmAExuAEXyAEM2AED6AEB-AECiAIBqAIDuAKiwqmEBsACAdICJGFkMTQ3OGU4LTUwZDMtNGQ5ZS1hYzAxLTc0OTIyYTRiZDIxM9gCBOACAQ&sid=729aafddc363c28a2c2c7379d7685d87&all_sr_blocks=36363601_246990918_2_85_0&checkin=2021-12-08&checkout=2021-12-15&dest_id=-1354779&dest_type=city&dist=0&from_beach_key_ufi_sr=1&group_adults=2&group_children=0&hapos=1&highlighted_blocks=36363601_246990918_2_85_0&hp_group_set=0&hpos=1&no_rooms=1&sb_price_type=total&sr_order=popularity&sr_pri_blocks=36363601_246990918_2_85_0__29200&srepoch=1619681695&srpvid=51c8354f03be0097&type=total&ucfs=1&req_children=0&req_adults=2&hp_refreshed_with_new_dates=1")
output3 <- url3 %>%
html_nodes(xpath = './/table[@id="hprt-table"]') %>%
html_table() %>% .[[1]]
output31 <- output3 %>% mutate_at(c("Accommodation Type", "Price for 1 week"), ~str_extract(., ".*\n"))
您可以创建一个函数来进行清理或在脚本中使用函数内的逻辑。
该函数检查“房间类型”是否在列名中。如果是,用第一行代码清理,如果不是,用else部分清理。
clean_up <- function(data){
if("Room type" %in% colnames(data)){
out <- data %>%
mutate_at(c("Room type", "Price for 1 week"), ~str_extract(., ".*\n"))
} else {
out <- data %>%
mutate_at(c("Accommodation Type", "Price for 1 week"), ~str_extract(., ".*\n"))
}
out
}
output31 <- clean_up(output3)
请注意,您可能违反了 booking.com
的服务条款
我正在使用 R 从网页上抓取 Table。我的问题是网页上的 table 列之一在这两个名称之间随机更改其 header 名称:“住宿类型”和“房间类型”。
因此,如果我不希望我的 R 脚本在到达特定代码行时中断,我需要手动检查网页并相应地更正我的 R 代码。
这是代码(当该列标题为“住宿类型”时):
output31 <- output3 %>% mutate_at(c("Accommodation Type", "Price for 1 week"), ~str_extract(., ".*\n"))
这是代码(当该列标题为“房间类型”时):
output31 <- output3 %>% mutate_at(c("Room type", "Price for 1 week"), ~str_extract(., ".*\n"))
有没有办法插入一种 IF 条件,其逻辑是如果发现“住宿类型”作为列标题,则必须忽略提到“房间类型”的那行代码,反之亦然反过来?
编辑(添加了完整代码):
library(rvest)
library(dplyr)
library(stringr)
if (!require(tables)) install.packages('tables')
library(tables)
library(xlsx)
url3 <- read_html("https://www.booking.com/hotel/mu/lux-grand-baie-resort-amp-residences.en-gb.html?aid=356980&label=gog235jc-1DCAsonQFCE2hlcml0YWdlLWF3YWxpLWdvbGZIM1gDaJ0BiAEBmAExuAEXyAEM2AED6AEB-AECiAIBqAIDuAKiwqmEBsACAdICJGFkMTQ3OGU4LTUwZDMtNGQ5ZS1hYzAxLTc0OTIyYTRiZDIxM9gCBOACAQ&sid=729aafddc363c28a2c2c7379d7685d87&all_sr_blocks=36363601_246990918_2_85_0&checkin=2021-12-08&checkout=2021-12-15&dest_id=-1354779&dest_type=city&dist=0&from_beach_key_ufi_sr=1&group_adults=2&group_children=0&hapos=1&highlighted_blocks=36363601_246990918_2_85_0&hp_group_set=0&hpos=1&no_rooms=1&sb_price_type=total&sr_order=popularity&sr_pri_blocks=36363601_246990918_2_85_0__29200&srepoch=1619681695&srpvid=51c8354f03be0097&type=total&ucfs=1&req_children=0&req_adults=2&hp_refreshed_with_new_dates=1")
output3 <- url3 %>%
html_nodes(xpath = './/table[@id="hprt-table"]') %>%
html_table() %>% .[[1]]
output31 <- output3 %>% mutate_at(c("Accommodation Type", "Price for 1 week"), ~str_extract(., ".*\n"))
您可以创建一个函数来进行清理或在脚本中使用函数内的逻辑。
该函数检查“房间类型”是否在列名中。如果是,用第一行代码清理,如果不是,用else部分清理。
clean_up <- function(data){
if("Room type" %in% colnames(data)){
out <- data %>%
mutate_at(c("Room type", "Price for 1 week"), ~str_extract(., ".*\n"))
} else {
out <- data %>%
mutate_at(c("Accommodation Type", "Price for 1 week"), ~str_extract(., ".*\n"))
}
out
}
output31 <- clean_up(output3)
请注意,您可能违反了 booking.com
的服务条款