从长格式到宽格式,具有相同的重复项

问题描述

尝试此命令:

library("spacyr")
library("dplyr",warn.conflicts = FALSE)

mytext <- data.frame(text = c("test text","section 2 sending"),id = c(32,41))
df2 <- tidyr::separate_rows(mytext,text)

df3 <- data.frame(text = df2$text,id = df2$id)

dflemma <- spacy_parse(structure(df3$text,names = df3$id),lemma = TRUE,pos = FALSE)  %>%
    mutate(id = doc_id) %>%
    group_by(id) %>%
    summarize(body = paste(lemma,collapse = " "))

期望的输出是使用相同ID的长到宽格式,并用空格分隔合并文本。这里是预期的输出

data.frame(text = c("test text","section 2 send"),41)

但是该命令提供此错误

Error in process_document(x,multithread) : Docnames are duplicated.

解决方法

在您的base R上尝试以下df3解决方案:

#Code
dflemma <- aggregate(text~id,df3,function(x) paste(x,collapse = ' '))

输出:

  id              text
1 32         test text
2 41 section 2 sending
,

出现此错误是因为您将每个文本短语分隔为单词。你不应该那样做。考虑以下代码:

mytext <- data.frame(text = c("test text","section 2 sending"),id = c(32,41))
dflemma <- 
  spacy_parse(structure(mytext$text,names = mytext$id),lemma = TRUE,pos = FALSE) %>% 
  group_by(id = doc_id) %>% 
  summarise(text = paste(lemma,collapse = " "))

输出

> dflemma
# A tibble: 2 x 2
  id    text          
  <chr> <chr>         
1 32    test text     
2 41    section 2 send

更新

如果必须进行分离,则需要进一步修改id列以确保其中的每个观察值都是唯一的。稍后,您可以在id阶段将这些group_by改回来。考虑以下代码。

mytext <- data.frame(text = c("test text",41))
df2 <- tidyr::separate_rows(mytext,text) %>% group_by(id) %>% mutate(id = paste0(id,"-",seq_len(n())))
dflemma <- 
  spacy_parse(structure(df2$text,names = df2$id),pos = FALSE) %>% 
  group_by(id = sub("(.+)-(.+)","\\1",doc_id)) %>% 
  summarise(text = paste(lemma,collapse = " "))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...