首页 > 解决方案 > 合并数据框中的文本元素并删除文本来自的行

问题描述

这个玩具数据框表示按人员的时间条目。我可用的格式以完全随机的模式为同一个人和同一天提供多个文本条目。同一个人和同一天最多可以有 15 个文本条目。多文本条目的行中没有人员条目。

structure(list(Date = structure(c(1514764800, 1514764800, NA, 
1517443200, 1519862400, NA, NA, NA, 1519862400, NA, NA), class = c("POSIXct", 
"POSIXt"), tzone = "UTC"), Person = c("FMC", "ABC", NA, "FMC", 
"ABC", NA, NA, NA, "RWM", NA, NA), Text = c("work on request", 
"More text", "third line", "email to re: summary", "work on loan documents", 
"sixth line of text", "text seven", "eighth in a series", "conferences with working group", 
"line ten", "review and provide comments")), row.names = c(NA, 
-11L), class = c("tbl_df", "tbl", "data.frame"))

如何组合文本元素,以便每个人每天的条目只有一行,删除不需要的行(一旦将文本粘贴在一起)并到达以下对象?

在此处输入图像描述

EDITED QUESTION 省略了for我尝试失败的循环。

必须有一种方法可以将给定日期的给定人员的所有文本组合成一行(例如,ABC 在 2018 年 1 月 1 日有两个条目)并删除组合文本来自的行。

标签: rcopy-paste

解决方案


我们可以使用最后一个非缺失na.locf值来填充缺失值 ( ),然后将连续出现的和组合在一起。NAgroup_byPersonsummarise Textpaste

library(dplyr)
library(zoo)
library(data.table)

df %>%
  na.locf(.) %>%
  group_by(group = rleid(Person)) %>%
  summarise(Text = paste0(Text, collapse = " "))


#  group Text                                                                   
#  <int> <chr>                                                                  
#1     1 work on request                                                        
#2     2 More text third line                                                   
#3     3 email to re: summary                                                   
#4     4 work on loan documents sixth line of text text seven eighth in a series
#5     5 conferences with working group line ten review and provide comments 

对于更新的问题,我们可以做

library(dplyr)
library(zoo)

df %>%
  na.locf(.) %>%
  group_by(Date, Person) %>%
  summarise(Text = paste0(Text, collapse = " "))

推荐阅读