r - 使用 dplyr/mutate 修复 R 中的不兼容类型错误

标签 r tidyverse dplyr

我正在尝试使用 R 中的 tidyverse/dplyr 包来处理数据,包括对在线 API(来自 Altmetric)的矢量化调用以使用 mutate 添加行。

我可以创建的最小代码重现错误如下。我收到错误“错误:类型不兼容,需要数字向量”

library(tidyverse)
library(jsonlite)

fromJSON_wrapper <- function(x,y) {
  fromJSON(x)[[c(y)]]
}

toy <- tibble(
      doi = c("10.1002/anie.201500251", "10.1080/19443994.2015.1005695", "10.1007/s13721-015-0095-0"), 
      url = c("https://api.altmetric.com/v1/doi/10.1002/anie.201500251", "https://api.altmetric.com/v1/doi/10.1080/19443994.2015.1005695", "https://api.altmetric.com/v1/doi/10.1080/19443994.2015.1005695")
      )

extracted <- toy %>% rowwise() %>% mutate(score = fromJSON_wrapper(url,"score"))

用于提取以下单个分数的代码有效,无论是仅使用包装器还是在一行小标题上,我都不确定为什么我的代码不起作用。
fromJSON_wrapper("https://api.altmetric.com/v1/doi/10.1007/s13721-015-0095-0")
extracted <- toy[1,] %>% rowwise() %>% mutate(score = fromJSON_wrapper(url, "score"))

任何建议,将不胜感激。

最佳答案

只需遍历 URL 向量并提取您需要的内容就更简单了。 purrr::map_dbl虽然这很简单 sapply也能正常工作。

library(tidyverse)

toy <- tibble(
    doi = c("10.1002/anie.201500251", "10.1080/19443994.2015.1005695", "10.1007/s13721-015-0095-0"), 
    url = c("https://api.altmetric.com/v1/doi/10.1002/anie.201500251", "https://api.altmetric.com/v1/doi/10.1080/19443994.2015.1005695", "https://api.altmetric.com/v1/doi/10.1080/19443994.2015.1005695")
)

extracted <- toy %>% mutate(score = map_dbl(url, ~jsonlite::fromJSON(.x)$score))

extracted %>% select(doi, score)
#> # A tibble: 3 × 2
#>                             doi score
#>                           <chr> <dbl>
#> 1        10.1002/anie.201500251  0.25
#> 2 10.1080/19443994.2015.1005695  1.00
#> 3     10.1007/s13721-015-0095-0  1.00

关于r - 使用 dplyr/mutate 修复 R 中的不兼容类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43791976/

相关文章:

r - 在 R 中创建等同于 Excel 的 =PERCENTRANK.EXC 函数?

r - 使用 R 跨文件夹中的文件错误 map_df

rlang:Curly curl 运算符和 RHS 上字符串内的隧道数据变量

r - Tidyverse 获取 lm() 残差的方法,使用列的子集作为预测变量,但将所有内容保留在输出中

r - 双左加入 dplyr 以恢复值

r - ggplot2:在右侧为一个变量创建第二个 y 轴

在预测中收到 "Variable Lengths Differ"错误

r - 在R中的map()中使用管道

r - 确定子组索引

r - 根据R中每列中的每个值创建一个计数表