R 如何正确分割字符值
我有一个由一些复合信息组成的数据框架。我想将向量a拆分为向量“a”和“d”,其中“a”仅对应于数字ID 898、3467、234、222,而向量“d”包含相应的字符值 数据:R 如何正确分割字符值,r,R,我有一个由一些复合信息组成的数据框架。我想将向量a拆分为向量“a”和“d”,其中“a”仅对应于数字ID 898、3467、234、222,而向量“d”包含相应的字符值 数据: strsplit是正确的,但您需要传递要拆分的字符: do.call(rbind, strsplit(as.character(df$a), "_")) # [,1] [,2] # [1,] "898" "Me" # [2,] "3467" "You or " # [3,] "234"
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(tidyr)
a根据您的示例,下面是我在base R中的解决方案:
df$a2 <- gsub("[^0-9]", "", a)
df$d <- gsub("[0-9]", "", a)
虽然不美观,但它保留了原始数据且易于应用。请您在数据框上举例说明您的答案好吗?我就是做不到:splitstrsplit(as.character(df$a),“”)
。他们的示例代码将“df$a”作为一个因子,而不是字符。同样值得向OP指出的是,它给出的数字将是一个字符而不是数字类。aI只是想将数字id从字符串中分离出来,并在一个数据帧内实现这一点。数字和字符串之间是否总是有
永远不要包含自己的
?(。
不是-
)你也可以做提取(df,a,c(“d”,“e”),“(\\d+)(\\d+),remove=FALSE)
,以便在一行中实现相同的效果,尽管我认为这里不需要任何其他东西,而只需按。
谢谢@davidernburg的建议。我不知道extract
函数。它属于哪个包裹?
a d b c
898 Me 1 2
3467 You or 8 3
234 Hi-hi 3 6
222 what 8 2
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)
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"
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