R 中的 mutate 关键字和函数的问题

Problem with mutate keyword and functions in R

我在使用 MUTATE 时遇到问题,请检查下一个代码块。

output1 <- mytibble %>% 
  mutate(newfield = FND(mytibble$ndoc)) 
output1

其中 FND 函数是应用于大文件 (5GB) 的 FILTER:

FND <- function(n){
  result <- LARGETIBBLE %>% filter(LARGETIBBLE$id == n)
  return(paste(unique(result$somefield),collapse=" "))
}

我想对 output1 tibble 的每一行执行 FND 函数,但它只执行一次。

FND(mytibble$ndoc)更适合数据框。当您在小标题上使用 mutate 等函数时,无需指定小标题的名称,只需指定列的名称即可。符号 %>% 已经确保只使用小标题中的数据。因此,您的示例将是:


output1 <- mytibble %>% 
  mutate(newfield = FND(ndoc)) 

FND <- function(n){
  result <- LARGETIBBLE %>% filter(id == n)
  return(paste(unique(result$somefield),collapse=" "))
}

这在理论上是可行的,但是我不知道您的功能 FND 是否有效,也许可以尝试一下,如果不能,请给出一些实际的数据示例以及您想要实现的目标。

永远不要在 dplyr 管道中使用 $,它们很少被使用。您可以将 FND 函数更改为:

library(dplyr)

FND <- function(n){
   LARGETIBBLE %>% filter(id == n) %>% pull(somefield)  %>% 
                  unique %>% paste(collapse = " ")
}

现在将此函数应用于 mytibble 中的每个 ndoc 值。

mytibble %>% mutate(newfield = purrr::map_chr(ndoc, FND))

您也可以使用 sapply :

mytibble$newfield <- sapply(mytibble$ndoc, FND)