首页 > 解决方案 > 如何将 R 函数应用于每一行并组合结果

问题描述

我有一个带有文本数据的数据框,其中一列包含感兴趣的文本,其他列是与此文本相关的元数据。

text     metadata_1  metadata_2  
x        abc         123         
y        def         456
z        ghi         789
  

对于单行,我有一个函数:

get_entities <- function(x) {
  
  # run text through google nlp api with gl_nlp()
  nlp_result <- x["text"] %>% 
    gl_nlp()
  
  # store entities results in dataframe
  entities <- as.data.frame(nlp_result[["entities"]]) 
  
  # bind text info with entities into for the analyzed text
  bind_cols(x, entities)  
}

输出类似于:

text     metadata_1  metadata_2  entity        entity_type
x        abc         123         Joe           PERSON
x        abc         123         Chicago       LOCATION
x        abc         123         World Series  EVENT

但我想对文本数据集中的每一行执行相同的操作:分析文本字段,从 get_nlp() 列表输出中分离实体结果,并将这些结果连接回相应的文本元数据。然后,理想情况下,将单个结果连接到一个位置。

text     metadata_1  metadata_2   entity         entity_type
x        abc         123          Joe            PERSON
x        abc         123          Chicago        LOCATION
x        abc         123          World Series   EVENT
y        def         456          2002           DATE
y        def         456          New York       LOCATION
z        ghi         789          2016           DATE

我一直无法确定迭代我的数据集并组合结果的最佳方法。有没有一种方法最适合将函数中的数据集组合为for循环的一部分apply

标签: rnlp

解决方案


您可以为每一行apply使用函数并组合结果。get_entities

result <- do.call(rbind, apply(df, 1, get_entities))

推荐阅读