【发布时间】:2020-11-03 17:11:28
【问题描述】:
问题标题可能无法完全反映我的问题,这也许是我无法为我的问题找到解决方案的原因。我已经阅读了类似的问题(例如,Assign a value to column based on condition across rows 或 R: Generate a dummy variable based on the existence of one column' value in another column)和在 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 中有解决方案,那就太好了,但当然任何解决方案都会有所帮助。
【问题讨论】:
标签: r tidyverse dummy-variable