如何基于var1和var2创建含二进制变量的表格?
解决方案
你可以用R里的tidyverse工具包或者基础R函数来实现这个需求,下面是两种实用的方法:
方法一:使用tidyverse(dplyr + tidyr)
先假设你的原始数据集是这样的(示例):
df <- data.frame(var1 = c(10, 5), var2 = c(3, 2))
运行以下代码生成目标表格:
library(dplyr) library(tidyr) # 按行处理,生成二进制列表后展开成行 result <- df %>% rowwise() %>% # 为每行生成包含var2个1和(var1-var2)个0的列表 mutate(binary = list(c(rep(1, var2), rep(0, var1 - var2)))) %>% # 将每行拆成var1行 uncount(var1) %>% # 把列表中的二进制值拆成单独列 unnest(binary)
方法二:使用基础R函数
同样基于上面的示例数据集,用基础R实现:
# 用lapply批量生成每个行对应的二进制向量 binary_list <- lapply(1:nrow(df), function(i) { c(rep(1, df$var2[i]), rep(0, df$var1[i] - df$var2[i])) }) # 把所有向量合并成数据框 result <- data.frame(binary = unlist(binary_list))
两种方法都能自动处理特殊情况:比如var1等于var2时生成全1的行,var2为0时生成全0的行。
内容的提问来源于stack exchange,提问作者Marta Román
相关产品推荐
相关产品推荐

