gpt4 book ai didi

r - 如何根据R中两列的值创建虚拟变量?

转载 作者:行者123 更新时间:2023-12-04 08:38:40 24 4
gpt4 key购买 nike

问题标题可能无法完全反射(reflect)我的问题,这也许就是我无法为我的问题提出解决方案的原因。我已经阅读了类似的问题(例如, Assign a value to column based on condition across rowsR: 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 但不是一个 , 否则为 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_byCountry考虑所有 Time每个 Country 中的值.
满足DummyTime123标准,您需要all Time 中 1、2 和 3 的值Country 中的值.如 TRUE ,然后使用 +这变为 1。
对于 DummyTime23 ,听起来您想要 Time 中的 2 和 3但不想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

关于r - 如何根据R中两列的值创建虚拟变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64667411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com