我使用keyword_search从pdf提取数据,最终将结果汇总为小标题。很棒,但是现在我想进一步总结一下已存储在小标题的“ token_text”列表中的数据,尤其是我只对每行列表的最后一个元素感兴趣。但是,我知道如何提取列表中元素的功能似乎并不起作用?
例如如果我有一个列表元素“ a”,则可以使用以下命令访问该列表中的最后一个元素:
sapply(a,tail,1)
但是这似乎不起作用:
result$token_text, tail,1)
因为这只给了我整个列表,而不是列表的最后一个元素。 我想念什么?
下面是我的“结果”提示的内容。
谢谢您的帮助。
structure(list(keyword = c("124-38-9", "124-38-9", "124-38-9",
"124-38-9", "124-38-9", "124-38-9", "124-38-9", "124-38-9", "124-38-9",
"124-38-9", "124-38-9", "124-38-9", "124-38-9", "124-38-9", "74-82-8",
"74-82-8", "74-82-8", "74-82-8", "74-82-8", "74-82-8", "74-82-8",
"74-82-8", "74-82-8", "74-82-8", "10024-97-2", "10024-97-2",
"10024-97-2", "10024-97-2", "10024-97-2", "10024-97-2", "10024-97-2",
"10024-97-2", "10024-97-2", "10024-97-2"), page_num = c(20L,
21L, 21L, 21L, 21L, 21L, 22L, 22L, 22L, 23L, 23L, 24L, 24L, 24L,
21L, 21L, 22L, 22L, 23L, 23L, 23L, 24L, 24L, 24L, 21L, 21L, 22L,
22L, 23L, 23L, 23L, 24L, 24L, 24L), line_num = c(500L, 503L,
504L, 516L, 517L, 518L, 527L, 533L, 542L, 550L, 559L, 567L, 573L,
579L, 505L, 519L, 528L, 534L, 545L, 551L, 560L, 568L, 574L, 580L,
506L, 520L, 529L, 535L, 546L, 552L, 561L, 569L, 575L, 581L),
line_text = list("124-38-9 CO2 nonbio 8812.3593 8812.3593",
"124-38-9 CO2 bio-nC 0 0",
"124-38-9 CO2 bio-C 0 0",
"124-38-9 CO2 nonbio 0 0",
"124-38-9 CO2 bio-nC 0 0",
"124-38-9 CO2 bio-C 0 0",
"124-38-9 CO2 8411.7989 8411.7989",
"124-38-9 CO2 0 0",
"124-38-9 CO2 392.9536 392.9536",
"124-38-9 CO2 4.0087 4.0087",
"124-38-9 CO2 3.5981 3.5981",
"124-38-9 CO2 0 0",
"124-38-9 CO2 0 0",
"124-38-9 CO2 0 0",
"74-82-8 CH4 83.0642 2076.6050",
"74-82-8 CH4 0 0",
"74-82-8 CH4 7.8340 195.8500",
"74-82-8 CH4 0 0",
"74-82-8 CH4 2.0398 50.9950",
"74-82-8 CH4 30.4243 760.6075",
"74-82-8 CH4 42.7661 1069.1525",
"74-82-8 CH4 0 0",
"74-82-8 CH4 0 0",
"74-82-8 CH4 0 0",
"10024-97-2 N2O 0.2146 63.9508",
"10024-97-2 N2O 0 0",
"10024-97-2 N2O 0.2139 63.7422",
"10024-97-2 N2O 0 0",
"10024-97-2 N2O 0.0007 0.2086",
"10024-97-2 N2O 0 0",
"10024-97-2 N2O 0 0",
"10024-97-2 N2O 0 0",
"10024-97-2 N2O 0 0",
"10024-97-2 N2O 0 0"),
token_text = list(list(c("124", "38", "9", "co2", "nonbio",
"8812.3593", "8812.3593")), list(c("124", "38", "9", "co2",
"bio", "nc", "0", "0")), list(c("124", "38", "9", "co2",
"bio", "c", "0", "0")), list(c("124", "38", "9", "co2", "nonbio",
"0", "0")), list(c("124", "38", "9", "co2", "bio", "nc",
"0", "0")), list(c("124", "38", "9", "co2", "bio", "c", "0",
"0")), list(c("124", "38", "9", "co2", "8411.7989", "8411.7989"
)), list(c("124", "38", "9", "co2", "0", "0")), list(c("124",
"38", "9", "co2", "392.9536", "392.9536")), list(c("124",
"38", "9", "co2", "4.0087", "4.0087")), list(c("124", "38",
"9", "co2", "3.5981", "3.5981")), list(c("124", "38", "9",
"co2", "0", "0")), list(c("124", "38", "9", "co2", "0", "0"
)), list(c("124", "38", "9", "co2", "0", "0")), list(c("74",
"82", "8", "ch4", "83.0642", "2076.6050")), list(c("74",
"82", "8", "ch4", "0", "0")), list(c("74", "82", "8", "ch4",
"7.8340", "195.8500")), list(c("74", "82", "8", "ch4", "0",
"0")), list(c("74", "82", "8", "ch4", "2.0398", "50.9950"
)), list(c("74", "82", "8", "ch4", "30.4243", "760.6075")),
list(c("74", "82", "8", "ch4", "42.7661", "1069.1525"
)), list(c("74", "82", "8", "ch4", "0", "0")), list(c("74",
"82", "8", "ch4", "0", "0")), list(c("74", "82", "8",
"ch4", "0", "0")), list(c("10024", "97", "2", "n2o",
"0.2146", "63.9508")), list(c("10024", "97", "2", "n2o",
"0", "0")), list(c("10024", "97", "2", "n2o", "0.2139",
"63.7422")), list(c("10024", "97", "2", "n2o", "0", "0"
)), list(c("10024", "97", "2", "n2o", "0.0007", "0.2086"
)), list(c("10024", "97", "2", "n2o", "0", "0")), list(
c("10024", "97", "2", "n2o", "0", "0")), list(c("10024",
"97", "2", "n2o", "0", "0")), list(c("10024", "97", "2",
"n2o", "0", "0")), list(c("10024", "97", "2", "n2o",
"0", "0")))), row.names = c(NA, -34L), class = c("tbl_df",
"tbl", "data.frame"))
答案 0 :(得分:2)
您可以执行以下操作...
result$last_token <- sapply(result$token_text, function(x) tail(x[[1]], 1))
您需要sapply
沿着列表列表,然后一次执行一次。假设last_token
的每个元素都是一个包含向量的长度为1的列表。
答案 1 :(得分:1)
token_text
是一个列表列,因此您需要进一步使用[[
访问list元素。这是使用map_chr
中的purrr
的解决方案。
library(purrr)
map_chr(result$token_text, ~tail(.[[1]], 1))
# [1] "8812.3593" "0" "0" "0" "0" "0"
# [7] "8411.7989" "0" "392.9536" "4.0087" "3.5981" "0"
# [13] "0" "0" "2076.6050" "0" "195.8500" "0"
# [19] "50.9950" "760.6075" "1069.1525" "0" "0" "0"
# [25] "63.9508" "0" "63.7422" "0" "0.2086" "0"
# [31] "0" "0" "0" "0"
答案 2 :(得分:1)
with(result, sapply(token_text, function(x) tail(x[[1]], 1)))
[1] "8812.3593" "0" "0" "0" "0" "0"
[7] "8411.7989" "0" "392.9536" "4.0087" "3.5981" "0"
[13] "0" "0" "2076.6050" "0" "195.8500" "0"
[19] "50.9950" "760.6075" "1069.1525" "0" "0" "0"
[25] "63.9508" "0" "63.7422" "0" "0.2086" "0"
[31] "0" "0" "0" "0"
或更多tidyverse
分:
library(dplyr)
result %>%
pull(token_text) %>%
sapply(function(x) last(unlist(x)))
答案 3 :(得分:1)
使用tidyverse
可以做到这一点:
result %>%
mutate_at(vars(token_text), ~map_chr(.,~last(.[[1]])))
# A tibble: 34 x 5
# keyword page_num line_num line_text token_text
# <chr> <int> <int> <list> <chr>
# 1 124-38-9 20 500 <chr [1]> 8812.3593
# 2 124-38-9 21 503 <chr [1]> 0
# 3 124-38-9 21 504 <chr [1]> 0
# 4 124-38-9 21 516 <chr [1]> 0
# 5 124-38-9 21 517 <chr [1]> 0
# 6 124-38-9 21 518 <chr [1]> 0
# 7 124-38-9 22 527 <chr [1]> 8411.7989
# 8 124-38-9 22 533 <chr [1]> 0
# 9 124-38-9 22 542 <chr [1]> 392.9536
# 10 124-38-9 23 550 <chr [1]> 4.0087
# ... with 24 more rows
,如果只需要%>% pull(token_text)
列的内容,则添加一个token
。