如何基于其他变量的匹配名称使用ifelse创建多个变量?

时间:2019-06-04 10:47:48

标签: r

我真的很难阐明我的问题,因此实际上可能与标题所暗示的问题不同! 我有一个包含6个因子变量的数据框。变量名称为:

var_1_1
var_1_2
var_2_1
var_2_2
var_3_1
var_3_2

对于所有以1结尾的变量,级别为“是”,“否”和“未知”。所有以两个结尾的变量都有两个级别-“是”和“否”。

在变量名的前5个字符匹配的地方,我想创建一个新的变量,该变量将两个半匹配变量的“是”和“否”级别相加。因此,我最终总共要有9个变量,像这样:

var_1_1
var_1_2
var_1_3
var_2_1
var_2_2
var_2_3
var_3_1
var_3_2
var_3_3

我的第一个想法是执行3条ifelse语句来产生新变量,但是我试图减少代码中的重复。我想这可以通过for循环或应用来完成,但是我对此感到非常困惑。任何建议将不胜感激!

这是我本来打算做的,但是认为可能有一种重复性较低的方法...

df$var_1_3 <- ifelse(df$var_1_1=="Yes" | df$var_1_2=="Yes","Yes","No") 

df$var_1_3 <- as.factor(df$var_1_3)

1 个答案:

答案 0 :(得分:0)

一种选择是根据列名称上的子字符串将数据集拆分为一个列表

grp <- sub("_\\d+$", "", names(df1))
#or
#grp <- substr(names(df1), 1, 5)
lst1 <- split.default(df1, grp)

遍历list并创建“是/否”

nm1 <- paste0(names(lst1), "_3")
df1[nm1] <- lapply(lst1, function(x) c("No", "Yes")[(rowSums(x == "Yes") > 0) + 1])