在 R 中分隔一列

Separate a column in R

data.df

colA

2 AD
3 KF
4 GH

我想把这一栏分成两栏

 colA  ColB
  2     AD
  3     KF
  4     GH

这是我的代码:

library(dplyr)

X1 <- data.df

ca <- as.data.frame(X1) %>% separate(X1,col=colA, into = paste("colA","colB"))

错误:值未在 1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、 19、20、21、22、23、24、25、26、27、28、29、30、31、32、33、34、35、36、37、38、39、40、41、42、43、 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64

我的代码有什么问题?

当你使用管道命令时,每个函数的第一个参数将是 data.frame,所以尝试

library(tidyr)
dat %>% separate(colA, c("colA", "colB"))
#   colA colB
# 1    2   AD
# 2    3   KF
# 3    4   GH

数据

dat <- structure(list(colA = structure(1:3, .Label = c("2 AD", "3 KF", 
"4 GH"), class = "factor")), .Names = "colA", row.names = c(NA, 
-3L), class = "data.frame")

我们可以使用 base R 中的 read.table 来做到这一点。如果初始数据集中的'colA'为factorclass,则转换为character,并使用read.table。我们可以使用 col.names 参数指定列名。

read.table(text=as.character(dat$colA), sep='',
                      col.names=paste0('col', c('A', 'B')) )
#   colA colB
#1    2   AD
#2    3   KF
#3    4   GH

另一个选项是 cSplit 来自 splitstackshape。我们在 splitColssep 中指定要拆分的列。 direction 默认为 'wide'。

 library(splitstackshape)
 cSplit(dat, 'colA', ' ')

注意:"dat" 来自@nongkrong 的 post