我有一个由一些复合信息组成的数据框。我想将矢量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
答案 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
不优雅,但它保留了原始数据并且易于应用。