R中的条件列拆分

时间:2018-06-27 15:37:46

标签: r tidyverse

data

该列同时包含“ a”之类的数据和“ 8a”之类的数据

a

a

a

a

8a

8a

8a

我一直试图将具有“ a”或“ 8a”值的列分为两列,以便当存在8时具有值“ a”的列和具有“ 8”的列。我试图按位置分开,但是不管是否存在“ 8”,“ a”的位置都会变化,并且我不确定该怎么做,因此它不起作用。我将不胜感激,

非常感谢:)

2 个答案:

答案 0 :(得分:1)

我们可以使用separate。指定正则表达式环视以在数字和字母a之间的交界处分割

library(tidyverse)
dat %>% 
   separate(initiativen, into = c('col1', 'col2'), sep= "(?<=8)(?=a)")

更一般的情况是将任意数字和任意字母分开

dat %>% 
   separate(initiativen, into = c('col1', 'col2'), sep= "(?<=[0-9])(?=[A-Za-z])")

数据

dat <- data.frame(initiativen = c('a', 'a', 'a', 'a', '8a'), 
               stringsAsFactors = FALSE)

答案 1 :(得分:1)

使用基数R可以做到

dat <- data.frame(questionn = rep("008", 7),
                  initiativen = c(rep("a", 4), rep("8a", 3)),
                  stringsAsFactors = FALSE)                      


eight <- grepl("^8", dat$initiativen)
split(dat, eight)
#$`FALSE`
#  questionn initiativen
#1       008           a
#2       008           a
#3       008           a
#4       008           a
#
#$`TRUE`
#  questionn initiativen
#5       008          8a
#6       008          8a
#7       008          8a

如果只想拆分列,则将该列作为第一个参数传递给split

split(dat$initiativen, eight)
#$`FALSE`
#[1] "a" "a" "a" "a"
#
#$`TRUE`
#[1] "8a" "8a" "8a"