我的数据框如下:
b <- data.frame(height = c(190,165,174,176), name = c('John Smith 34','Mr.Turner 54', 'Antonio P. 23', 'John Brown 31'))
# height name
# 1 190 John Smith 34
# 2 165 Mr.Turner 54
# 3 174 Antonio P. 23
# 4 176 John Brown 31
我们可以看到姓名和年龄的值是相同的。因此我想通过字符串中的最后两个字符进行拆分:
height name age
1 190 John Smith 34
2 165 Mr.Turner 54
3 174 Antonio P. 23
4 176 John Brown 31
我该怎么做呢?
library(tidyr)
库,对变量b
进行操作。将name
变量按照后三个字符为分隔符,拆分成新的两个变量name
和age
,并将结果赋值给b
。其中,convert = TRUE
表示将age
变量转换为数字类型。 - alistaireb <- cbind(b[-2], setNames(as.data.frame(do.call(rbind, strsplit(as.character(b$name), '.(?=..$)', perl = T)), stringsAsFactors = FALSE), c('name', 'age'))) ; b$age <- type.convert(b$age)
来完成。 - alistairecbind(b[1], read.csv(text = gsub(' (..)$', ',\\1', b$name), header = FALSE))
- rawr