r - 如何根据 R 中两列的值创建虚拟变量?
问题描述
问题标题可能无法完全反映我的问题,这也许就是我无法为我的问题提出解决方案的原因。我已经阅读了类似的问题(例如,根据跨行的条件为列分配值或R:根据另一列中存在一列的值生成一个虚拟变量)和关于在 R 中创建虚拟变量的在线指南(我对 R 很陌生),但似乎没有人解决我的问题,或者我只是不知道如何解决。我有一个这样的数据框:
df <- data.frame("Country" = c("US", "US", "US", "US", "IT", "IT", "IT","FR","FR"),
"Time" = c(1, 1, 2, 3, 1, 2, 1, 2, 3))
数据框更复杂,但每一行都是在给定时刻对一个国家的观察。我想创建一个虚拟变量,如果分配给该观察的国家是在时间 1、2 3 和 0 测量的,则该变量取值为 1,否则如果该国家是在时间测量,则另一个取值为 1矩 2 和 3但不是 1,否则为 0。所以数据框看起来像:
df2 <- data.frame("Country" = c("US", "US", "US", "US", "IT", "IT", "IT","FR","FR"),
"Time" = c(1, 1, 2, 3, 1, 2, 1, 2, 3),
"DummyTime123" = c(1, 1, 1, 1, 0, 0, 0, 0, 0),
"DummyTime23" = c(0, 0, 0, 0, 0, 0, 0, 1, 1))
因此,由于 US 在时间 1、2 和 3 处测量,因此美国观测值取值为 1,其余观测值取值为 0。但是,由于 FR 在时间 2 和 3 处测量,因此法国观测值取值为 1 ,其余的取值为 0(请注意,US 也取值为 0,因为它是在时间 1、2 和 3 测量的,而不仅仅是在时间 2 和 3)。
例如,我尝试在 tidyverse 中使用 if_else 创建一个虚拟对象,例如
DummyTime123 = ifelse(country = country, time = 1 & time = 2 & time = 3)
但这不起作用,非常合理,因为在时间 1、2 和 3 没有测量单个观察值。相反,我想根据是否测量该观察值(国家)的一列的值来为该观察值创建一个虚拟变量在几个(和特定的)时间。我还考虑过我的数据框可能不整洁,但我看不出是怎么回事,我认为这不是问题所在。当然,我可以手动执行此操作(这就是我到目前为止所做的),但是由于数据集非常大,我想找到一个自动化的解决方案。
¿ 有人有解决这个问题的方法吗?如果在 tidyverse 中有解决方案,那就太好了,但当然任何解决方案都会有所帮助。
解决方案
tidyverse
您可以尝试以下方法。
使用group_by
withCountry
考虑Time
每个 中的所有值Country
。
要满足DummyTime123
条件,您需要在 a 中的值中包含all
1、2 和 3 的Time
值Country
。如果TRUE
, 则使用+
this 变为 1。
对于DummyTime23
,听起来您想要 2 和 3 inTime
但不希望any
的值为Time
1。使用&
您可以确保满足两个条件。
让我知道这是否提供了预期的结果。
library(tidyverse)
df %>%
group_by(Country) %>%
mutate(DummyTime123 = +all(1:3 %in% Time),
DummyTime23 = +(all(2:3 %in% Time) & !any(Time == 1)))
输出
Country Time DummyTime123 DummyTime23
<chr> <dbl> <int> <int>
1 US 1 1 0
2 US 1 1 0
3 US 2 1 0
4 US 3 1 0
5 IT 1 0 0
6 IT 2 0 0
7 IT 1 0 0
8 FR 2 0 1
9 FR 3 0 1
推荐阅读
- laravel - laravel 搜索表单
- python - Python 3.7:在 await 中使用 asyncio await 的正确方法是什么?
- apache - 将 Apache 配置为 ASP.NET Core 非 SSL 应用程序的 HTTPS 反向代理是否存在安全问题?
- kotlin - Also/apply 的意外行为,无法将实例函数的引用传递给 also/apply
- python - 与响应模型不同的 flask-restplus POST marshall 输入模型
- python - Python while 循环运行,但 int() 使用不正确,无法输入“退出”
- c# - EF Core - 使用投影并包含实体的集合
- python - GCP 部署管理器 - “无效的配置文件:模板提取失败:找不到资源的导入模板 'apis.py'”
- python - 根据条件填充行
- django - 在 Django 的第三个模型中引用两个关联模型的最佳方法