【问题标题】:Stuck on making a dummy variable in R坚持在 R 中创建一个虚拟变量
【发布时间】:2020-11-10 21:17:53
【问题描述】:

如果满足两个列标准但它不起作用,我正在尝试创建一个虚拟变量。例如,在我的数据中,如果firm_state 是 CA、MA、MD、ME 等,而我的状态是 CA、MA、MD、ME 等,我希望虚拟变量为 1。所以在我的图片中,我将希望 State 为 MD 或 ME 且firm_state 为 CA 的行具有虚拟变量“1”,而其他 State 为 AZ 或 TX 且firm_state 为 CA 的行具有“0”。但是,当我编写代码时,我只是将 same_party 中的所有内容都视为具有虚拟变量“1”。有人可以告诉我哪里出错了吗?这是我当前的代码。

data <- data %>%
mutate(same_party = ifelse(firm_state == "CA" | firm_state == "CO" | 
firm_state == "NY" & State == "MD" | 
State == "ME" | State == "WA", 1, 0))

【问题讨论】:

  • 如果您能够向我们提供您的数据样本,将会有所帮助。例如,您可以输入 dput(data) 并将输出粘贴到您的帖子中。
  • 就像@Matt 说的那样,当您的示例无法重现时,真的很难提供帮助。也就是说,我认为您可以在 ifelse() 语句中使用一些括号来解决这个问题,将您所追求的不同组合括起来。您还可以从dplyr 中查看case_when(),以使您的语法更清晰,从而更容易调试。
  • 是的,我认为您的逻辑几乎包括了所有内容,因为您没有在 ifelse 中使用括号
  • 我很抱歉。我可以看到我的图片可能有点混乱。我的数据由来自同一个“firm_state”的数千行数据组成,所以我不确定如何显示它。我可能应该做一个单独的例子。但 DPH 能够回答我的问题。无论如何感谢您的帮助!
  • 如果您觉得这些答案有帮助,请采纳其中一个。

标签: r dummy-variable


【解决方案1】:

问题似乎是您的条件没有很好地分开或分组。这意味着您有一连串“或”,中间有一个“和”。使用 to pais of 括号应该可以解决您的问题:

data <- data %>%
  mutate(same_party = ifelse((firm_state == "CA" | firm_state == "CO" | 
                               firm_state == "NY") & (State == "MD" | 
                               State == "ME" | State == "WA"), 1, 0))

%in% 运算符的使用更容易理解:

data <- data %>%
  mutate(same_party = ifelse(firm_state %in% c("CA","CO","NY") & State %in% c("MD","ME","WA"), 1, 0))

【讨论】:

  • 非常感谢!我的数据终于看起来正确了。我没想过添加额外的括号。
【解决方案2】:

您可以使用%in% 而不是很多==

data <- data %>%
  mutate(same_party = ifelse(firm_state %in% c("CA","CO","NY") &
                             State %in% c("MD","ME","WA"),1,0))

虚拟数据:

data = data.frame(
  State = sample(c("AZ","LA","MD","ME","MD","WA"),10, TRUE),
  firm_state = sample(c("CA","CO","NY"), 10, TRUE))

输出:

   State firm_state same_party
1     WA         CA          1
2     MD         CO          1
3     MD         CA          1
4     LA         CA          0
5     MD         NY          1
6     ME         NY          1
7     MD         NY          1
8     MD         NY          1
9     LA         NY          0
10    ME         NY          1

【讨论】:

  • 非常感谢!我将不得不了解有关 %in% 函数的更多信息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 1970-01-01
  • 2018-07-20
相关资源
最近更新 更多