在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 日创建