首页 > 解决方案 > 从列表中创建一个因子

问题描述

我正在重做一些旧的大学论文,将其从 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% 运算符。非常感谢!

标签: r

解决方案


您需要使用%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 并且非常喜欢它。


推荐阅读