繁体   English   中英

R:如何将分隔的列(状态)拆分为具有二进制1,0的列

[英]R: how do split a delimited columns(state) into columns with a binary 1,0

感谢您的帮助。 需要将填充了分隔值的列拆分为以其分隔值命名的列,并且每个新列都要填充1或0,其中找到值或不找到值。

state <- 
  c('ACT',
    'ACT|NSW|NT|QLD|SA|VIC',
    'ACT|NSW|NT|QLD|TAS|VIC|WA',
    'ACT|NSW|NT|SA|TAS|VIC',
    'ACT|NSW|QLD|VIC',
    'ACT|NSW|SA',
    'ACT|NSW|NT|QLD|TAS|VIC|WA|SA',
    'NSW',
    'NT',
    'NT|SA',
    'QLD',
    'SA',
    'TAS',
    'VIC',
    'WA')

df <- data.frame(id = 1:length(state),state)

id                        state
1   1                          ACT
2   2        ACT|NSW|NT|QLD|SA|VIC
3   3    ACT|NSW|NT|QLD|TAS|VIC|WA
4   4        ACT|NSW|NT|SA|TAS|VIC
...

期望状态是具有相同维度的数据帧以及基于根据行填充1或0的状态的附加列。

詹姆斯

你可以这样做:

library(tidyr)
library(dplyr)

df %>% 
    separate_rows(state) %>% 
    unique() %>%            # in case you have duplicated states for a single id
    mutate(exist = 1) %>% 
    spread(state, exist, fill=0)

#   id ACT NSW NT QLD SA TAS VIC WA
#1   1   1   0  0   0  0   0   0  0
#2   2   1   1  1   1  1   0   1  0
#3   3   1   1  1   1  0   1   1  1
#4   4   1   1  1   0  1   1   1  0
#5   5   1   1  0   1  0   0   1  0
#6   6   1   1  0   0  1   0   0  0
#7   7   1   1  1   1  1   1   1  1
#8   8   0   1  0   0  0   0   0  0
#9   9   0   0  1   0  0   0   0  0
#10 10   0   0  1   0  1   0   0  0
#11 11   0   0  0   1  0   0   0  0
#12 12   0   0  0   0  1   0   0  0
#13 13   0   0  0   0  0   1   0  0
#14 14   0   0  0   0  0   0   1  0
#15 15   0   0  0   0  0   0   0  1
  • separate_rows拆分state并将数据帧转换为长格式;
  • 添加一个常量值列以进行重新整形;
  • 使用spread将结果转换为宽格式;

这里是一个base R选项通过分裂“州”列| ,将矢量list转换为两列data.framestack ),使用table获取频率,使用第一列“df”获取cbind

cbind(df[1], as.data.frame.matrix(table(stack(setNames(strsplit(as.character(df$state), 
                   "[|]"), df$id))[2:1])))
#   id ACT NSW NT QLD SA TAS VIC WA
#1   1   1   0  0   0  0   0   0  0
#2   2   1   1  1   1  1   0   1  0
#3   3   1   1  1   1  0   1   1  1
#4   4   1   1  1   0  1   1   1  0
#5   5   1   1  0   1  0   0   1  0
#6   6   1   1  0   0  1   0   0  0
#7   7   1   1  1   1  1   1   1  1
#8   8   0   1  0   0  0   0   0  0
#9   9   0   0  1   0  0   0   0  0
#10 10   0   0  1   0  1   0   0  0
#11 11   0   0  0   1  0   0   0  0
#12 12   0   0  0   0  1   0   0  0
#13 13   0   0  0   0  0   1   0  0
#14 14   0   0  0   0  0   0   1  0
#15 15   0   0  0   0  0   0   0  1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM