R语言中如何表示任意值以按概率规则生成dataframe新变量
R代码问题解答
核心修改点
你需要根据自己的实际需求选择对应的填写内容,同时注意修正原代码中rbinom的参数错误:
- 如果你需要执行最初声明的单变量对应规则(即AY仅匹配原变量A、BY仅匹配原变量B,以此类推):
???处填入data[[substr(i, 1, 1)]] == 1
这段代码会提取当前循环的Y变量名首字符,匹配原始data里的对应变量,判断取值是否为1。 - 如果你需要执行最后提到的任意原变量为1的全局规则(即只要A-J中有任意一个变量为1,所有Y变量都用0.8概率生成1):
???处填入apply(data[, LETTERS[1:10]], 1, function(row) any(row == 1))
这段代码会逐行判断A-J列是否存在至少一个取值为1的变量,返回对应行的布尔判断结果。
必要参数修正
你原代码中rbinom的第一个参数填写错误:length(out)返回值为10(仅对应10个Y变量),而你的数据集有500行,需要修改为nrow(data)才能为每一行生成对应的随机值。
修正后的完整代码示例(单变量对应规则版本)
out <- paste0(LETTERS[1:10], "Y") data2 <- data.frame(data) colnames(data2) <- out for (i in out) { data2[i] <- ifelse(data[[substr(i, 1, 1)]] == 1, rbinom(nrow(data), 1, 0.8), rbinom(nrow(data), 1, 0.2)) } # 生成后可合并原始数据和新变量 data_final <- cbind(data, data2)
内容的提问来源于stack exchange,提问作者Samantha
相关产品推荐
相关产品推荐

