在R中的列中拆分单词

我在 R 中有一个包含多列的数据框。我想将“年龄”列分成两列,每列都有一个字符串。

         fas       value age colony
   1:  C12:0 0.002221915  LO   7_13
   2:  C13:0 0.000770179  LO   7_13
   3:  C14:0 0.004525352  LO   7_13
   4:  C15:0 0.000738928  LO   7_13
   5: C16:1a 0.002964627  LO   7_13

输出:

         fas           value size age colony
       1:  C12:0 0.002221915    L   O   7_13
       2:  C13:0 0.000770179    L   O   7_13
       3:  C14:0 0.004525352    L   O   7_13
       4:  C15:0 0.000738928    L   O   7_13
       5: C16:1a 0.002964627    L   O   7_13

我试过:

data_frame<-str_split_fixed(df$age, "", 2)

回答

使用基础 R:

df$size <- substr(df$age,1,1)
df$age  <- substr(df$age,2,2)

并按照您指定的列顺序获取结果:

df[,c("fas","value","age","size","colony")]
     fas       value age size colony
1  C12:0 0.002221915   O    L   7_13
2  C13:0 0.000770179   O    L   7_13
3  C14:0 0.004525352   O    L   7_13
4  C15:0 0.000738928   O    L   7_13
5 C16:1a 0.002964627   O    L   7_13


回答

由于您的数据似乎是data.table,我将推断该包已加载。但是,strcapture是基 R 并且将返回data.frame带有两列的 a(基于第三个参数的名称/类,proto=)。

strcapture("(.)(.)", DT$age, list(size="", age=""))
#   size age
# 1    L   O
# 2    L   O
# 3    L   O
# 4    L   O
# 5    L   O

library(data.table)
DT[, c("size", "age") := strcapture("(.)(.)", age, list(size="", age="")) ]
DT
#       fas       value    age colony   size
#    <char>       <num> <char> <char> <char>
# 1:  C12:0 0.002221915      O   7_13      L
# 2:  C13:0 0.000770179      O   7_13      L
# 3:  C14:0 0.004525352      O   7_13      L
# 4:  C15:0 0.000738928      O   7_13      L
# 5: C16:1a 0.002964627      O   7_13      L

您可以选择在模式中更具防御性,转移到"^(.)(.)$",这不应与我们的 2-char 期望之外的任何内容相匹配。


数据

DT <- data.table::fread(text="
   fas       value age colony
 C12:0 0.002221915  LO   7_13
 C13:0 0.000770179  LO   7_13
 C14:0 0.004525352  LO   7_13
 C15:0 0.000738928  LO   7_13
C16:1a 0.002964627  LO   7_13")


回答

您可以使用sub和反向引用:

df$age <- sub("(^w)(w$)", "1", df$age)
df$size <- sub("(^w)(w$)", "2", df$age)


回答

tidyverse 解决方案使用tidyr::separate()

library("tidyr")

tbl <- read.table(header = TRUE, text = "
   fas       value age colony
 C12:0 0.002221915  LO   7_13
 C13:0 0.000770179  LO   7_13
 C14:0 0.004525352  LO   7_13
 C15:0 0.000738928  LO   7_13
C16:1a 0.002964627  LO   7_13")

separate(tbl, age, c("age", "size"), 1)
#>      fas       value age size colony
#> 1  C12:0 0.002221915   L    O   7_13
#> 2  C13:0 0.000770179   L    O   7_13
#> 3  C14:0 0.004525352   L    O   7_13
#> 4  C15:0 0.000738928   L    O   7_13
#> 5 C16:1a 0.002964627   L    O   7_13

由reprex 包(v1.0.0)于2021年 2 月 21 日创建


以上是在R中的列中拆分单词的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>