gpt4 book ai didi

r - 拆分字符列并获取字符串中的字段名称

转载 作者:行者123 更新时间:2023-12-04 01:46:12 25 4
gpt4 key购买 nike

我需要将包含信息的列拆分为几列。
我会用 tstrsplit但是相同类型的信息在行中的顺序不同,我需要在变量中提取新列的名称。重要的是要知道:可能有很多信息(成为新变量的字段),但我不知道所有这些信息,所以我不想要“逐个字段”的解决方案。

下面是我所拥有的一个例子:

library(data.table)

myDT <- structure(list(chr = c("chr1", "chr2", "chr4"), pos = c(123L,
435L, 120L), info = c("type=3;end=4", "end=6", "end=5;pos=TRUE;type=2"
)), class = c("data.table", "data.frame"), row.names = c(NA,-3L))

# chr pos info
#1: chr1 123 type=3;end=4
#2: chr2 435 end=6
#3: chr4 120 end=5;pos=TRUE;type=2

我想得到:
#    chr pos end  pos type
#1: chr1 123 4 <NA> 3
#2: chr2 435 6 <NA> <NA>
#3: chr4 120 5 TRUE 2

一个最直接的方法将不胜感激! (注意:我不愿意采用 dplyr/tidyr 方式)

最佳答案

使用 regexstringi包:

setDT(myDT) # After creating data.table from structure()

library(stringi)

fields <- unique(unlist(stri_extract_all(regex = "[a-z]+(?==)", myDT$info)))
patterns <- sprintf("(?<=%s=)[^;]+", fields)
myDT[, (fields) := lapply(patterns, function(x) stri_extract(regex = x, info))]
myDT[, !"info"]

chr pos type end
1: chr1 <NA> 3 4
2: chr2 <NA> <NA> 6
3: chr4 TRUE 2 5

编辑:要获得正确的类型(?) type.convert()可以使用:
myDT[, (fields) := lapply(patterns, function(x) type.convert(stri_extract(regex = x, info), as.is = TRUE))]

关于r - 拆分字符列并获取字符串中的字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59103539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com