如何按条件创建新变量New_Var:全Test变量为0时值为2,否则为0
问题描述
现有数据集如下:
Test1 Test2 Test3 Test4 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 1
需要创建新变量New_Var,满足规则:
- 当所有以Test开头的变量值均为0时,
New_Var取值为2 - 当至少一个以Test开头的变量值为1时,
New_Var取值为0
期望输出结果:
Test1 Test2 Test3 Test4 New_Var 0 0 0 0 2 0 0 0 0 2 1 0 1 0 0 0 0 0 0 2 0 1 0 1 0
解决方案
以下是几种常见数据处理工具的实现方法:
1. Python(Pandas)
筛选Test开头的列,通过每行求和判断是否全为0,再赋值生成新变量:
import pandas as pd import numpy as np # 构造数据集 data = pd.DataFrame({ 'Test1': [0, 0, 1, 0, 0], 'Test2': [0, 0, 0, 0, 1], 'Test3': [0, 0, 1, 0, 0], 'Test4': [0, 0, 0, 0, 1] }) # 创建New_Var test_cols = data.filter(like='Test') data['New_Var'] = np.where(test_cols.sum(axis=1) == 0, 2, 0) print(data)
2. R语言
用starts_with匹配目标列,结合行求和结果判断并生成新变量:
library(dplyr) # 构造数据集 data <- data.frame( Test1 = c(0, 0, 1, 0, 0), Test2 = c(0, 0, 0, 0, 1), Test3 = c(0, 0, 1, 0, 0), Test4 = c(0, 0, 0, 0, 1) ) # 创建New_Var data <- data %>% mutate(New_Var = ifelse(rowSums(select(., starts_with("Test"))) == 0, 2, 0)) print(data)
3. SAS
通过数组遍历Test开头的变量,判断每行是否全为0后赋值:
data want; set have; array tests[*] Test:; all_zero = 1; do i = 1 to dim(tests); if tests[i] = 1 then do; all_zero = 0; leave; end; end; New_Var = ifc(all_zero, 2, 0); drop i all_zero; run;
内容的提问来源于stack exchange,提问作者NewUsr_stat
相关产品推荐
相关产品推荐

