如何正确拆分字符值

时间:2015-06-03 08:17:26

标签: r

我有一个由一些复合信息组成的数据框。我想将矢量a分成矢量" a"和" d",其中" a"仅对应于数字ID 898,3467,234,222和向量" d"包含相应的字符值。

数据:

a<-c("898_Me","3467_You or ", "234_Hi-hi", "222_what")
b<-c(1,8,3,8)
c<-c(2,4,6,2)
df<-data.frame(a,b,c)

到目前为止我尝试了什么:

a<-str(df$a)

a<-strsplit(df$a, split)

但这并不能解决我的正则表达技巧。

所需的输出表格可能包含以下格式:

                       a    d        b   c
                      898   Me       1   2
                      3467  You or   8   3
                      234   Hi-hi    3   6
                      222   what     8   2   

3 个答案:

答案 0 :(得分:4)

library(tidyr)

a<-c("898_Me","3467_You or ", "234_Hi-hi", "222_what")

b<-c(1,8,3,8)

c<-c(2,4,6,2)

df <-data.frame(a,b,c)

final_df <- separate(df , a , c("a" , "d") , sep = "_")

#    a       d b c
#1  898      Me 1 2
#2 3467 You or  8 4
#3  234   Hi-hi 3 6
#4  222    what 8 2

final_df$d

# [1] "Me"      "You or " "Hi-hi"   "what"  

答案 1 :(得分:2)

strsplit是正确的,但您需要将角色传递给:

do.call(rbind, strsplit(as.character(df$a), "_"))
#      [,1]   [,2]     
# [1,] "898"  "Me"     
# [2,] "3467" "You or "
# [3,] "234"  "Hi-hi"  
# [4,] "222"  "what"   

library(stringi)
stri_split_fixed(df$a, "_", simplify = TRUE)

答案 2 :(得分:0)

以你的例子为例,这是我在R基础上的解决方案:

df$a2 <- gsub("[^0-9]", "", a)
df$d <- gsub("[0-9]", "", a)

这给出了:

> df
             a b c   a2        d
1       898_Me 1 2  898      _Me
2 3467_You or  8 4 3467 _You or 
3    234_Hi-hi 3 6  234   _Hi-hi
4     222_what 8 2  222    _what

不优雅,但它保留了原始数据并且易于应用。