如何拆分仅含0和1的整数列?使用tidyverse的separate函数未成功
二进制列拆分为两列的解决方案
你用separate函数没成功是正常的——这个函数是用来按分隔符拆分字符串列的(比如把"x|y"拆成两列),但你的列是单个0/1数值,没有分隔符,完全不匹配它的使用场景。
下面给你两种用tidyverse实现需求的方法,先拿示例数据演示:
library(tidyverse) # 构造示例数据集 df <- tibble(binary_col = c(0, 1, 0, 1, 1))
方法一:用pivot_wider转换宽表
适合需要动态处理不同值的场景(哪怕以后列里多了其他值也能扩展):
df %>% mutate(row_id = row_number()) %>% # 添加行号,避免重复行导致转换失败 pivot_wider( names_from = binary_col, values_from = binary_col, names_prefix = "col_", # 给新列加前缀 values_fill = 0, # 缺失值填充为0 values_fn = ~1 # 标记当前行对应值存在 ) %>% select(-row_id) # 移除临时行号列
运行后会得到两列:col_0和col_1,原列值为0时col_0=1、col_1=0;原列值为1时则相反。
方法二:用mutate直接生成新列
如果确定只有0和1两种值,这种方法更直接高效:
df %>% mutate( col_0 = ifelse(binary_col == 0, 1, 0), col_1 = ifelse(binary_col == 1, 1, 0) )
这样直接根据原列的值,分别生成对应标记列,逻辑清晰易懂。
内容的提问来源于stack exchange,提问作者babygould
相关产品推荐
相关产品推荐

