【问题标题】:Subsetting a dataframe in R using key words that appear in the first 100 words使用出现在前 100 个单词中的关键词对 R 中的数据框进行子集化
【发布时间】:2019-10-01 12:39:17
【问题描述】:

我有一个数据框,其中包含有关新闻文章(标题、日期、内容等)的信息。我想通过使用关键词过滤新闻文章的内容来子集这个数据框。但是,我想在内容的前 100 个单词中应用这些关键词。

到目前为止,我已经能够通过识别每篇文章中的关键字来对数据框进行子集化,如下所示。但是,我需要在每篇文章的前 100 个单词中识别出那些关键词。

#Dataframe
df_tiempo_noticias_farc1

#Filtering the dataframe by using key words
key_words_filter <- c("acuerdo de paz", "acuerdos de paz", "acuerdo con las farc", "acuerdos con las farc",
                      "acuerdo entre el gobierno y las farc", "acuerdo entre las farc y el gobierno", 
                      "proceso de paz", "diálogos con las farc", "diálogos en la habana", "diálogos de la habana",
                      "diálogos de paz", "negociación con las farc", "negociaciones con las farc", "negociación en la habana",
                      "negociaciones en la habana", "negociadores del gobierno y las farc", 
                      "negociadores de las farc y el gobierno", "plebiscito", "firma de la paz")

subset_tiempo_kwords <- df_tiempo_noticias_farc1[grep(paste0(key_words_filter, collapse = "|"), df_tiempo_noticias_farc1$content),]

这是一些数据样本

  > dput(subset_tiempo_kwords[1:2, 5])
[1]con la firma del nuevo acuerdo entre el gobierno y las farc y su refrendación en senado y cámara, las cartas están echadas y las apuestas, hechas. pero más allá de quién gane la partida, el resultado es que vamos al año y medio más difícil en la historia reciente del país.pese a que hubo cambios de fondo en el acuerdo final, como era previsible, no hubo acuerdo con los del no (no vale ya discutir si se les podía haber dado más juego o si, en el fondo, solo lo querían para dar largas). esto significa que la verdadera refrendación de lo acordado entre el gobierno y las farc se traslada a las elecciones del 2018.el país sigue tan dividido como antes del plebiscito (aunque más apático con la paz, a cuya firma ha asistido cinco veces desde junio). la polarización y el encono que signaron la campaña del plebiscito solo fueron el abrebocas de lo que nos espera hasta las elecciones presidenciales, que serán el veredicto final sobre lo acordado.el gobierno y las farc decidieron firmar el acuerdo y pasarlo por el congreso. el bloque del no ya anunció que opondrá, dentro del capitolio, recursos legales, como buscar un referendo por firmas, y fuera de él, llamados que bordean la ruptura institucional, como la revocatoria del congreso o la resistencia civil.todo indica que, aunque menos legítimo, el camino del congreso se escogió como más seguro, contando con las mayorías oficiales (que ya se exhibieron en el 75-0 de la refrendación en senado). arriesgada apuesta, pues esa vía puede terminar no siendo ni legítima ni segura.otro plebiscito sería largo, costoso y polarizador, como dice el gobierno. pero el legislativo no solo confiere menos legitimidad que cualquier consulta popular para refrendar el acuerdo, sino que es una de las instituciones más desprestigiadas del país. refrendar con una proposición, la fórmula de menor jerarquía en la mecánica legislativa, solo acentuará ese pecado de origen.pero la fragilidad de la refrendación vía congreso no es lo más grave. las grandes sorpresas pueden ser las de la implementación.el congreso es una vía de alto riesgo para los acuerdos. el gobierno ha puesto velas, cirios y candelabros para que la corte constitucional reviva la famosa ‘vía rápida’ para que los parlamentarios aprueben, veloces y sin cambios, lo que les proponga para implementar el acuerdo. pero, como pintan las cosas, es más probable que le toque irse por la vía ordinaria.con lo cual tomaría todo el 2017 poner a funcionar la jurisdicción especial para la paz, blindar jurídicamente el acuerdo y aprobar las leyes para hacerlo realidad. y los congresistas podrían introducir modificaciones inesperadas –como ya lo sugirió cambio radical respecto al sistema de justicia–. esto haría más traumático y lento el proceso de desmovilización de las farc. y pondría en lo más álgido de la campaña electoral un proceso de paz inconcluso y lleno de tensiones.ni el plebiscito ni la renegociación del nuevo acuerdo zanjaron la división entre partidarios del sí y del no. el gobierno, con sus mayorías en el congreso, puede lograr ahora blindar constitucionalmente lo acordado. pero otro gobierno, con otras mayorías, puede echar todo abajo –y a eso se la juega el bloque del no para el 2018–.todo este año y medio que falta hasta las elecciones presidenciales estará signado por esa polarización, que está tan viva como antes del plebiscito. el trámite de lo acordado en el congreso no hará sino agudizarla. y, mientras tanto, estará en curso, con más o menos sobresaltos, el complejo proceso de desmovilización, dejación de armas y reintegración de las farc.la ‘crispación nacional’ se va a profundizar hasta que en el 2018 se decida finalmente quién ganó: la paz o el no.\r* * * *\ry el eln... para enero.álvaro sierra restrepocortapalo@gmail.com@cortapalo, 

[2] la comisión interamericana de derechos humanos (cidh) aplaudió este jueves la firma y aprobación del acuerdo de paz con las farc que fue ratificado esta semana tanto por la cámara como por el senado colombiano.\ren un comunicado expedido desde washington, el ente hemisférico expresa a su vez su beneplácito por los esfuerzos del gobierno por incluir en el nuevo acuerdo algunas propuestas de quienes se oponían al documento en general.\r\"la comisión interamericana reconoce los esfuerzos del estado para la renegociación del acuerdo de paz, en atención al pluralismo efectivo necesario en una sociedad democrática. la comisión ve con beneplácito que, tras tomar en cuenta las propuestas planteadas por los grupos que cuestionaron el acuerdo anterior y llamaron a votar en contra del mismo en el plebiscito del 2 de octubre pasado, colombia haya llegado a un nuevo acuerdo para la terminación del conflicto con las farc - ep\", dice la cidh. (le puede interesar: 'debemos presentar la ley de amnistía la próxima semana': mininterior)\ren el comunicado la comisión menciona la reunión que sostuvieron recientemente con el presidente juan manuel santos en la que se discutió \"la actual precariedad del cese al fuego y la futura implementación del acuerdo en colombia\".\rsegún este órgano, el presidente de la cidh, james cavallaro, le expresó a santos que el ente que encabeza continuaría monitoreando que la implementación del acuerdo se realice dentro del \"respeto y garantía a los estándares interamericanos\" de derechos humanos.\r\"la comisión mantiene su convicción respecto a que la consolidación de la paz es un requisito indispensable para el ejercicio y respeto de los derechos humanos. la cidh continúa comprometida con la búsqueda de la paz en colombia y dispuesta a colaborar en este esfuerzo, y en ese marco dará seguimiento a la implementación del nuevo acuerdo, en el marco de sus funciones\", dijo caravallo.\ren el comunicado, no obstante, la cidh resalta que el texto del nuevo acuerdo que les entregó santos en la reunión cambió antes de ser aprobado. (además: lo que viene tras la refrendación de la paz en el congreso)\raunque no menciona a cuál ajuste se refiere, la única modificación conocida al nuevo acuerdo que se llegó con las farc fue uno en el que se eliminó un artículo que hacía referencia a la responsabilidad de los militares por las acciones de sus subalternos.\ral respecto, el comisionado para colombia, josé de jesús orozco, destacó que \"continuarán dando seguimiento a la situación de los derechos humanos en colombia, a fin de que la implementación efectiva del acuerdo permita satisfacer los estándares internacionales de verdad, justicia y reparación en el contexto de transición hacia la paz\".\rpor su parte el embajador de colombia ante la oea, andrés gonzález, resaltó el apoyo de la comisión como \"de la mayor importancia porque el gobierno ha querido que el acuerdo de paz cumpla con todos los estándares internacionales. su declaración es esclarecedora: el camino más apropiado para prevenir las graves violaciones de derechos humanos es la terminación del conflicto armado. de acuerdo con gonzález el respaldo de la cidh representa \"una sólida columna de legitimidad jurídica internacional. todo el sistema interamericano se ha pronunciado por la paz de colombia como la paz de américa. primero, el consejo permanente de la oea por unanimidad. ahora la entidad rectora del continente en derechos humanos\".\rsergio gómez masericorresponsal de el tiempowashington ")

我该怎么做?感谢您的帮助!

【问题讨论】:

  • 你能分享一些数据吗?

标签: r subset keyword-search


【解决方案1】:

下面的代码是一个创建新变量“Sentance_new”的示例,该变量选择原始句子中的前 9 个单词。您可以简单地将 9 更改为 100。然后根据您想要的关键词进行过滤。

 Df_1 <- data.frame(Sentance=c("Hello how are you doing today acuerdo de paz? 
         Can you give me a hand with this work."))

 Df_2<-Df_1 %>%
    mutate(Sentance_new=word(Sentance,1,9)) %>%
    filter(str_detect(Sentance_new, 'acuerdo de paz'))

编辑添加: DF_1 是您的数据集,其中包含来自众多新闻网站的文本。继续添加 "str_detect(news_2, "acuerdos de paz") | "来自你的关键词。 “|”是或。

DF_2<-DF_1 %>%
  mutate(news_2=word(news,1,100)) %>%
  filter(str_detect(news_2, "acuerdo de paz") |
     str_detect(news_2, "acuerdos de paz") | 
     str_detect(news_2, "acuerdo con las farc"))

【讨论】:

  • 我已经编辑了我的帖子,因此您可以看到我的两个数据示例。我不确定我是否理解您的回答,因为我的数据不仅仅是一句话,而是很多。换句话说,我要检查的每一行都是一篇新闻文章。我需要在每篇新闻文章的前 100 个字中应用关键字。希望这是有道理的。
  • 是的,这就是我的代码执行的内容。它可以逐行过滤您想要的关键字。我没有全部输入,你可以全部添加。
  • 我应用了以下代码new_df&lt;- subset_tiempo_kwords$content %&gt;% mutate(news_2=word(subset_tiempo_kwords$content,1,100)) %&gt;% filter(str_detect(news_2, "acuerdo de paz") | str_detect(news_2, "acuerdos de paz") | str_detect(news_2, "acuerdo con las farc")),但出现错误。它说我不能将mutate 用于character 类的对象。我应该改用哪个类?
  • 以我制作的文本为例
  • 我应用了你的代码。如果我添加一个高数字,它似乎正在工作。但是,当添加低的(由于某种原因我不明白)时,它没有得到我需要的内容。在下面的例子中,它应该得到我在帖子中分享的第一个样本,因为“acuerdo”这个词是第六个。但是,事实并非如此。 new_test2 &lt;- subset_tiempo_kwords%&gt;% mutate(content2=word(subset_tiempo_kwords$content, start = 1 , end = 10)) %&gt;% filter(str_detect(content2, "acuerdo"))你知道这是什么吗?
【解决方案2】:

想通了,使用第一个过滤器创建一个子集,并使用或运算符“|”创建一个正则表达式模式每个关键词之间:

df <- tribble(~A,
              "[1]con la firma del nuevo acuerdo entre el gobierno y las farc y su refrendación en senado y cámara, las cartas están echadas y las apuestas, hechas. pero más allá de quién gane la partida, el resultado es que vamos al año y medio más difícil en la historia reciente del país.pese a que hubo cambios de fondo en el acuerdo final, como era previsible, no hubo acuerdo con los del no (no vale ya discutir si se les podía haber dado más juego o si, en el fondo, solo lo querían para dar largas). esto significa que la verdadera refrendación de lo acordado entre el gobierno y las farc se traslada a las elecciones del 2018.el país sigue tan dividido como antes del plebiscito (aunque más apático con la paz, a cuya firma ha asistido cinco veces desde junio). la polarización y el encono que signaron la campaña del plebiscito solo fueron el abrebocas de lo que nos espera hasta las elecciones presidenciales, que serán el veredicto final sobre lo acordado.el gobierno y las farc decidieron firmar el acuerdo y pasarlo por el congreso. el bloque del no ya anunció que opondrá, dentro del capitolio, recursos legales, como buscar un referendo por firmas, y fuera de él, llamados que bordean la ruptura institucional, como la revocatoria del congreso o la resistencia civil.todo indica que, aunque menos legítimo, el camino del congreso se escogió como más seguro, contando con las mayorías oficiales (que ya se exhibieron en el 75-0 de la refrendación en senado). arriesgada apuesta, pues esa vía puede terminar no siendo ni legítima ni segura.otro plebiscito sería largo, costoso y polarizador, como dice el gobierno. pero el legislativo no solo confiere menos legitimidad que cualquier consulta popular para refrendar el acuerdo, sino que es una de las instituciones más desprestigiadas del país. refrendar con una proposición, la fórmula de menor jerarquía en la mecánica legislativa, solo acentuará ese pecado de origen.pero la fragilidad de la refrendación vía congreso no es lo más grave. las grandes sorpresas pueden ser las de la implementación.el congreso es una vía de alto riesgo para los acuerdos. el gobierno ha puesto velas, cirios y candelabros para que la corte constitucional reviva la famosa ‘vía rápida’ para que los parlamentarios aprueben, veloces y sin cambios, lo que les proponga para implementar el acuerdo. pero, como pintan las cosas, es más probable que le toque irse por la vía ordinaria.con lo cual tomaría todo el 2017 poner a funcionar la jurisdicción especial para la paz, blindar jurídicamente el acuerdo y aprobar las leyes para hacerlo realidad. y los congresistas podrían introducir modificaciones inesperadas –como ya lo sugirió cambio radical respecto al sistema de justicia–. esto haría más traumático y lento el proceso de desmovilización de las farc. y pondría en lo más álgido de la campaña electoral un proceso de paz inconcluso y lleno de tensiones.ni el plebiscito ni la renegociación del nuevo acuerdo zanjaron la división entre partidarios del sí y del no. el gobierno, con sus mayorías en el congreso, puede lograr ahora blindar constitucionalmente lo acordado. pero otro gobierno, con otras mayorías, puede echar todo abajo –y a eso se la juega el bloque del no para el 2018–.todo este año y medio que falta hasta las elecciones presidenciales estará signado por esa polarización, que está tan viva como antes del plebiscito. el trámite de lo acordado en el congreso no hará sino agudizarla. y, mientras tanto, estará en curso, con más o menos sobresaltos, el complejo proceso de desmovilización, dejación de armas y reintegración de las farc.la ‘crispación nacional’ se va a profundizar hasta que en el 2018 se decida finalmente quién ganó: la paz o el no.\r* * * *\ry el eln... para enero.álvaro sierra restrepocortapalo@gmail.com@cortapalo, ",
              "[2] la comisión interamericana de derechos humanos (cidh) aplaudió este jueves la firma y aprobación del acuerdo de paz con las farc que fue ratificado esta semana tanto por la cámara como por el senado colombiano.\ren un comunicado expedido desde washington, el ente hemisférico expresa a su vez su beneplácito por los esfuerzos del gobierno por incluir en el nuevo acuerdo algunas propuestas de quienes se oponían al documento en general.\r\"la comisión interamericana reconoce los esfuerzos del estado para la renegociación del acuerdo de paz, en atención al pluralismo efectivo necesario en una sociedad democrática. la comisión ve con beneplácito que, tras tomar en cuenta las propuestas planteadas por los grupos que cuestionaron el acuerdo anterior y llamaron a votar en contra del mismo en el plebiscito del 2 de octubre pasado, colombia haya llegado a un nuevo acuerdo para la terminación del conflicto con las farc - ep\", dice la cidh. (le puede interesar: 'debemos presentar la ley de amnistía la próxima semana': mininterior)\ren el comunicado la comisión menciona la reunión que sostuvieron recientemente con el presidente juan manuel santos en la que se discutió \"la actual precariedad del cese al fuego y la futura implementación del acuerdo en colombia\".\rsegún este órgano, el presidente de la cidh, james cavallaro, le expresó a santos que el ente que encabeza continuaría monitoreando que la implementación del acuerdo se realice dentro del \"respeto y garantía a los estándares interamericanos\" de derechos humanos.\r\"la comisión mantiene su convicción respecto a que la consolidación de la paz es un requisito indispensable para el ejercicio y respeto de los derechos humanos. la cidh continúa comprometida con la búsqueda de la paz en colombia y dispuesta a colaborar en este esfuerzo, y en ese marco dará seguimiento a la implementación del nuevo acuerdo, en el marco de sus funciones\", dijo caravallo.\ren el comunicado, no obstante, la cidh resalta que el texto del nuevo acuerdo que les entregó santos en la reunión cambió antes de ser aprobado. (además: lo que viene tras la refrendación de la paz en el congreso)\raunque no menciona a cuál ajuste se refiere, la única modificación conocida al nuevo acuerdo que se llegó con las farc fue uno en el que se eliminó un artículo que hacía referencia a la responsabilidad de los militares por las acciones de sus subalternos.\ral respecto, el comisionado para colombia, josé de jesús orozco, destacó que \"continuarán dando seguimiento a la situación de los derechos humanos en colombia, a fin de que la implementación efectiva del acuerdo permita satisfacer los estándares internacionales de verdad, justicia y reparación en el contexto de transición hacia la paz\".\rpor su parte el embajador de colombia ante la oea, andrés gonzález, resaltó el apoyo de la comisión como \"de la mayor importancia porque el gobierno ha querido que el acuerdo de paz cumpla con todos los estándares internacionales. su declaración es esclarecedora: el camino más apropiado para prevenir las graves violaciones de derechos humanos es la terminación del conflicto armado. de acuerdo con gonzález el respaldo de la cidh representa \"una sólida columna de legitimidad jurídica internacional. todo el sistema interamericano se ha pronunciado por la paz de colombia como la paz de américa. primero, el consejo permanente de la oea por unanimidad. ahora la entidad rectora del continente en derechos humanos\".\rsergio gómez masericorresponsal de el tiempowashington")

#do this for the whole list
key_words_filter <- c("acuerdo de paz|acuerdos de paz|acuerdo con las farc")

df %>% 
  mutate(selection = str_extract(A, "^.{100}")) %>% 
  filter_all(any_vars(str_detect(., pattern = key_words_filter )))

A tibble: 1 x 2
  A                                                  selection                                         
  <chr>                                              <chr>                                             
1 "[2] la comisión interamericana de derechos human~ [2] la comisión interamericana de derechos humano~
> 

您也可以使用 filter_at 或 filter_if 进行探索,如果您不想过滤所有列,则可以指定您想要的列。

【讨论】:

  • 我应用代码得到了这个Warning message: In stri_length(string) : invalid UTF-8 byte sequence detected. perhaps you should try calling stri_enc_toutf8()是什么意思?
  • 这意味着您使用的数据需要针对不同语言的不同编码。拉丁语言通常需要指定编码。如果您从 csv 导入,则可以使用 read_csv("data.csv", readr::locale(encoding = "latin1"))
  • 我不是从 csv 导入的。我的数据框是位于我的全局环境中的对象。如何更改编码?
  • 您应该为此打开另一个问题,或者对其进行一些研究,编码可能有点棘手。试试这个dplyr::mutate_if(df, is.character, .funs = function(x){return(`Encoding&lt;-`(x, "UTF-8"))}) 编码成 UTF-8 或 latin1
  • @JoseDavid 如果答案是正确的,你能标记为解决方案吗?
【解决方案3】:

这个答案是根据对这篇文章的其他两个回复产生的

#Creating the key words filter 
    key_words_filter2 <- c("acuerdo de paz|acuerdos de paz|acuerdo con las farc|acuerdos con las farc|acuerdo entre el gobierno y las farc|acuerdo entre las farc y el gobierno|acuerdos de la habana|proceso de paz|diálogos con las farc|diálogos en la habana|diálogos de la habana|diálogos de paz|negociación con las farc|negociaciones con las farc|negociación en la habana|negociaciones en la habana|negociadores del gobierno y las farc|negociadores de las farc y el gobierno|plebiscito")

为了使关键字过滤器起作用,它必须像上面那样在一行字符串中,并且每个关键字都由条件 | 分隔。 “或”。

#Subsetting the dataframe within 100 words
subset_tiempo_100 <- subset_tiempo_kwords%>%
  mutate(content2=word(subset_tiempo_kwords$content, start= 1, end = 100)) %>%
  filter(str_detect(content2, key_words_filter2)) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-26
    • 2021-12-04
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多