【问题标题】:Create a factor from list [duplicate]从列表中创建一个因子[重复]
【发布时间】:2019-12-14 22:16:22
【问题描述】:

我正在重做一些旧的大学论文,将其从 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")

我原以为包含“Australia”、“Austria”、“Belgium”的行会得到 OECD 的因子水平,而“Algeria”、“Bahrain”、“Comoros”会得到 Non-OECD。

Ps,这是我的第二个问题,非常感谢任何关于如何改进我的问题的提示!

已解决:正如下面接受的答案中所指出的,我应该使用 %in% 运算符。非常感谢!

【问题讨论】:

  • 你需要%in%df %&gt;% mutate(OECD = ifelse(country_name %in% c("Australia", "Austria", "Belgium"), "OECD", "Non-OECD"))或者直接df$OECD &lt;- ifelse(df$country_name %in% c("Australia", "Austria", "Belgium"), "OECD", "Non-OECD")

标签: r


【解决方案1】:

您需要使用%in%

如果您想留在 tidyverse 框架内,那么:

df %>% 
  mutate(OECD = ifelse(df[,"country_name"] %in% c("Australia", "Austria", "Belgium"), "OECD", "Non-OECD"))

或者对于 base 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 并且非常喜欢它。

【讨论】:

  • 谢谢!而@Ronak Shah 给出了与评论相同的答案,这非常有效!
  • 不用担心,只是添加了一个基本的 R 和 data.table 版本——作为一般性评论,如果你是 R 新手,你应该考虑使用不仅仅是 tidyverse 的工具,tidyverse 是一个工具箱有很多(非常好的)工具,但有时会有更适合任务的工具箱。
【解决方案2】:

你很接近。只是缺少“==”和“)”

df <- df %>% mutate(OECD = ifelse(country_name == c("Australia", "Austria", "Belgium"), "OECD", "Non-OECD"))

【讨论】:

  • 谢谢!然而,这对我使用的数据集有问题,因为它多次包含澳大利亚,并且仅将其中三分之一标记为经合组织。我现在意识到我应该在我的问题中提到的东西! =)
猜你喜欢
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
  • 2020-02-27
  • 2021-06-25
  • 1970-01-01
  • 2016-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多