gpt4 book ai didi

r - 将字符串解析为嵌套的 data.table

转载 作者:行者123 更新时间:2023-12-02 00:57:22 25 4
gpt4 key购买 nike

我在一个表中有数据,其中每一行中的一个单元格是一个多行字符串,其格式有点像在其末尾带有引用的文档。例如,其中一个字符串如下所示:

item A...1
item B...2
item C...3
item D...2
1=foo
2=bar
3=baz

我的最终目标是将 foo/bar/baz 提取到列中并计算匹配项。因此,对于上述内容,我最终会得到一行,包括:

foo | bar | baz
----+-----+----
1 | 2 | 1

我试图从提取“引用”映射开始,作为一个嵌套的 data.table,看起来像这样:

code | reason
-----+-------
1 | foo
2 | bar
3 | baz

这是我尝试使用 data.tablestringr 实现的方法。

encounter_alerts[, whys := lapply(
str_extract_all(text, regex('^[0-9].*$', multiline = TRUE)),
FUN = function (s) { fread(text = s, sep = '=', header = FALSE, col.names = c('code', 'reason')) }
)]

我对尝试执行此操作时收到的错误消息感到非常困惑:

Error in fread(text = s, sep = "=", header = FALSE, col.names = c("code",  :
file not found: 1=foo

我明确使用 text 而不是 file 所以我不确定它是如何尝试将文本行解释为文件名的!

当我用单行测试它时,它似乎工作正常:

> fread(text = str_extract_all(encounter_alerts[989]$text, regex('^[0-9].*$', multiline = TRUE))[[1]], sep = '=', header = FALSE, col.names = c('code', 'reason'))
code reason
1: 1 foo
2: 2 bar

我做错了什么?有更好的方法吗?

谢谢!

最佳答案

注:阅读评论后编辑

根据您的评论,我尝试重现我所理解的您的数据可能的样子。

library(tidyverse)

df <- tibble(
strings = c("item A...1
item B...2
item C...3
item D...2
1=foo
2=bar
3=baz",
"item A...2
item B...2
item C...3
item D...1
1=toto
2=foo
3=lala",
"item A...3
item B...3
item C...3
item D...1
1=tutu
3=ttt")
)

代码:

get_ref <- function(string) {
string %>%
str_split("\n") %>%
unlist() %>%
str_subset("=") %>%
str_split_fixed("=", 2) %>%
as_tibble() %>%
rename(code = V1, reason = V2)
}

list1 <- map(df$strings, get_ref)

get_value <- function(string) {
string %>%
str_split("\n") %>%
unlist() %>%
str_subset("\\.\\.\\.") %>%
str_replace_all(".*\\.\\.\\.", "") %>%
as_tibble() %>%
rename(code = value)
}

list2 <- map(df$strings, get_value)

get_result <- function(df1, df2) {
left_join(df1, df2) %>%
count(reason) %>%
spread(reason, n)
}

result <- map2_df(list1, list2, get_result)

result[is.na(result)] <- 0

result

结果

# A tibble: 3 x 7
bar baz foo lala toto ttt tutu
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 2 1 1 0 0 0 0
2 0 0 2 1 1 0 0
3 0 0 0 0 0 3 1

关于r - 将字符串解析为嵌套的 data.table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53273549/

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