如何基于两个参数创建符合条件的虚拟变量(R语言)
在R中创建符合条件的虚拟变量并按国家分类
需求说明
生成名为Result的虚拟变量:
- 当
Parameter1取值为A或B,且Parameter2为正值时,Result = 1 - 任一条件不满足时,
Result = 0
最终结果按国家分类展示。
示例数据加载
先加载你提供的示例数据:
df <- read.table( text = "Country, Year, Parameter1, Parameter2, Result, US, 1, A, 12, 1, US, 2, B, 4, 1, US, 3, C, 2, 0, US, 4, A, -4, 0, UK, 1, A, -1, 0, UK, 2, C, 2, 0, UK, 3, B, 3, 1, UK, 4, B, 2, 1, ", sep = ",", header = TRUE)
方法一:基础R实现
直接通过逻辑判断生成虚拟变量,再按国家排序实现分类展示:
# 生成Result变量 df$Result <- as.integer(df$Parameter1 %in% c("A", "B") & df$Parameter2 > 0) # 按国家排序,对应按国家分类的需求 df <- df[order(df$Country), ]
逻辑说明:
df$Parameter1 %in% c("A", "B"):判断Parameter1是否为A或B,返回布尔值df$Parameter2 > 0:判断Parameter2是否为正值,返回布尔值&:逻辑“且”,仅当两个条件都满足时返回TRUEas.integer():将布尔值TRUE/FALSE转换为1/0
方法二:dplyr包实现(适合流程化数据处理)
用dplyr的mutate生成变量,arrange按国家排序:
library(dplyr) df <- df %>% # 生成Result变量 mutate(Result = as.integer(Parameter1 %in% c("A", "B") & Parameter2 > 0)) %>% # 按国家排序,实现分类展示 arrange(Country)
验证结果
处理后的数据与示例结果一致:
| Country | Year | Parameter1 | Parameter2 | Result | |
|---|---|---|---|---|---|
| 1 | UK | 1 | A | -1 | 0 |
| 2 | UK | 2 | C | 2 | 0 |
| 3 | UK | 3 | B | 3 | 1 |
| 4 | UK | 4 | B | 2 | 1 |
| 5 | US | 1 | A | 12 | 1 |
| 6 | US | 2 | B | 4 | 1 |
| 7 | US | 3 | C | 2 | 0 |
| 8 | US | 4 | A | -4 | 0 |
内容的提问来源于stack exchange,提问作者Jens
相关产品推荐
相关产品推荐

