r - 从列表中创建一个因子
问题描述
我正在重做一些旧的大学论文,将其从 Stata 转换为 R 以学习 R,并试图找到一种方法来获取国家变量,并创建一个新变量,其中包含 OECD 成员或非成员.
我尝试使用 if-else 语句从 dplyr 进行变异,但它似乎不起作用,而且我尝试过的所有谷歌搜索似乎只是显示重新调整现有因素等。
例如(country_name 包含世界上所有国家/地区的名称,为便于阅读而缩写):
df <- data.frame(country_name = c("Australia", "Austria", "Belgium", "Algeria", "Bahrain", "Comoros"))
df <- df %>% mutate(OECD = ifelse(country_name = c("Australia", "Austria", "Belgium"), "OECD", "Non-OECD")
我原以为包含“澳大利亚”、“奥地利”、“比利时”的行会得到 OECD 的因子水平,而“阿尔及利亚”、“巴林”、“科摩罗”会得到非 OECD 的因子水平。
Ps,因为这是我的第二个问题,任何关于如何改进我的问题的提示都非常感谢!
已解决:正如在下面接受的答案中指出的那样,我应该使用 %in% 运算符。非常感谢!
解决方案
您需要使用%in%
.
如果你想留在tidyverse框架内,那么:
df %>%
mutate(OECD = ifelse(df[,"country_name"] %in% c("Australia", "Austria", "Belgium"), "OECD", "Non-OECD"))
或者对于基本 R方式:
df[,"OECD"] <- ifelse(df[,"country_name"] %in% c("Australia", "Austria", "Belgium"), "OECD", "Non-OECD")
或data.table方式(加载 data.table 包并使用data.table()
代替data.frame()
)
df[, OECD := "Non-OECD"][country_name %in% c("Australia", "Austria", "Belgium"), OECD := "OECD"]
这个 data.table 方法正在创建一个新变量,其中所有变量都是“非经合组织”,然后将特定变量转换为“经合组织”——我自己只是在学习 data.table 并且非常喜欢它。
推荐阅读
- codenameone - 使用 Codename One 创建一个兼作应用程序的网站
- prometheus - Prometheus Kubernetes SD Config - 存在 pod 注释
- python - 使用 mlxtend 计算方差、偏差 python 中的问题
- android - 如何使用 Retrofit Kotlin 从 JSON 对象中的特定字段获取数据
- node.js - 打开新终端并在 Node.js 中读取输入
- javascript - Jest Angular 测试登录异常
- r - 为什么我的堆叠 geom_bar 没有绘图?我对单元格的编辑正在产生某种错误
- python - 如何在远程计算机服务器上运行烧瓶项目?(视窗)
- android - 0 android playstore 上支持的设备
- python - 如何根据条件从 2 个列表中向熊猫添加新列