R语言 爬取数据+简单清洗

小小练习。见代码+注释

r 复制代码
 
# 加载必要的包
library(rvest)
library(dplyr)
library(tidyr)

# 指定网页URL
url <- "https://research.un.org/en/unmembers/scmembers"

# 读取网页内容
webpage <- read_html(url)

# 提取所有表格节点
table_nodes <- html_nodes(webpage, "table")

# 将第一个表格转换为数据框
sc_members_table1 <- html_table(table_nodes[1], fill = TRUE)
# 将第二个表格转换为数据框
sc_members_table2 <- html_table(table_nodes[2], fill = TRUE)

# 合并两个数据框
sc_members_combined <- bind_rows(sc_members_table1, sc_members_table2)

# 显示合并后的数据框
print(sc_members_combined)

# 保存合并后的数据框为CSV文件
write.csv(sc_members_combined, "web_data.csv", row.names = FALSE)



# ------------------------------ 处理数据。  ------------------------------ 


# 读取CSV文件
data <- read.csv("web_data.csv", stringsAsFactors = FALSE)
data

# 删掉最后一列
data <- data[, -ncol(data)]

head(data, 2)

# 拆分Members of Security Council列

print(colnames(data))

# Members.of.Security.Council

# 分割国家为单独的行 Members of Security Council
data_split <- data %>%
  separate_rows(`Members.of.Security.Council`, sep = ", ") %>%
  select(Year, `Members.of.Security.Council`)

# 重命名列
colnames(data_split) <- c("Year", "Country")



# 列出联合国常任理事国的英文名字
permanent_members <- c("China", "France", "Russian Federation", "United Kingdom", "United States")

# 新建一列 votes,所有值为 1
data_split <- data_split %>%
  mutate(votes = 1)

# 新建一列 veto,对于常任理事国,veto 值为 1,否则为 0
data_split <- data_split %>%
  mutate(veto = ifelse(Country %in% permanent_members, 1, 0))

# 新建一列 vote_share,根据 Year 列的值进行计算
data_split <- data_split %>%
  mutate(vote_share = ifelse(Year >= 1996, 1/15, 1/11))



# 保存结果到新的CSV文件
write.csv(data_split, "clean_data.csv", row.names = FALSE)

# 查看结果
print(data_split)
相关推荐
凡人叶枫8 分钟前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发
Tony Bai8 分钟前
再见,丑陋的 container/heap!Go 泛型堆 heap/v2 提案解析
开发语言·后端·golang
小糯米60129 分钟前
C++顺序表和vector
开发语言·c++·算法
froginwe1134 分钟前
JavaScript 函数调用
开发语言
独望漫天星辰39 分钟前
C++ 多态深度解析:从语法规则到底层实现(附实战验证代码)
开发语言·c++
无小道1 小时前
Qt——事件简单介绍
开发语言·前端·qt
devmoon1 小时前
在 Paseo 测试网上获取 Coretime:On-demand 与 Bulk 的完整实操指南
开发语言·web3·区块链·测试用例·智能合约·solidity
kylezhao20191 小时前
C# 中的 SOLID 五大设计原则
开发语言·c#
凡人叶枫2 小时前
C++中输入、输出和文件操作详解(Linux实战版)| 从基础到项目落地,避坑指南
linux·服务器·c语言·开发语言·c++
春日见2 小时前
车辆动力学:前后轮车轴
java·开发语言·驱动开发·docker·计算机外设