dplyr:根据另一列中的行创建新列

时间:2018-01-10 19:19:49

标签: r dataframe dplyr

我目前正在尝试修改R中的数据框,我想知道是否有可能使用dplyr代码执行此操作。我的目标是创建一个新列,它组合了每个'text'列的三行条目。我的数据如下:

        source       xmin       xmax            text  dur  
   1    FR1_   0.465000   0.725000            tour  260 
   2    FR1_  0.725000    0.805000              de   80  
   3    FR1_   0.805000   1.175000            rôle  370 
   4    FR1_   3.418440   3.608440           pomme  190 
   5    FR1_   3.608440   3.728440              de  120  
   6    FR1_   3.728440   4.128440           terre  400 
   7    FR1_   5.586440   6.066440         colonie  480 
   8    FR1_   6.066440   6.196440              de  130  
   9    FR1_  6.196440    6.796440        vacances  600  

我的目标是创建一个新的列'word',如下所示:

     source       xmin       xmax            text  dur     word
   1    FR1_   0.465000   0.725000            tour  260   tour de rôle
   2    FR1_  0.725000   0.805000              de   80    tour de rôle
   3    FR1_   0.805000   1.175000            rôle  370   tour de rôle
   4    FR1_   3.418440   3.608440           pomme  190   pomme de terre
   5    FR1_   3.608440   3.728440              de  120   pomme de terre
   6    FR1_   3.728440   4.128440           terre  400   pomme de terre
   7    FR1_   5.586440   6.066440         colonie  480  colonie de vacances
   8    FR1_   6.066440   6.196440              de  130  colonie de vacances
   9    FR1_  6.196440   6.796440        vacances  600   colonie de vacances

我很感激任何建议!

1 个答案:

答案 0 :(得分:0)

dplyr不喜欢单独使用行索引确定的多行单元。因此,第一步是创建一个变量,我们可以使用它将行分组为三个簇。然后,我们可以使用标准group_by()muatate()来扩展新列。例如

library(dplyr)
dd %>% 
  mutate(cluster=(1:n()-1)%/%3) %>% 
  group_by(cluster) %>% 
  mutate(word=paste(text, collapse=" ")) %>% 
  ungroup() %>% 
  select(-cluster)

这适用于样本数据

dd<-read.table(text="        source       xmin       xmax            text  dur  
   1    FR1_   0.465000   0.725000            tour  260 
   2    FR1_  0.725000    0.805000              de   80  
   3    FR1_   0.805000   1.175000            rôle  370 
   4    FR1_   3.418440   3.608440           pomme  190 
   5    FR1_   3.608440   3.728440              de  120  
   6    FR1_   3.728440   4.128440           terre  400 
   7    FR1_   5.586440   6.066440         colonie  480 
   8    FR1_   6.066440   6.196440              de  130  
   9    FR1_  6.196440    6.796440        vacances  600", header=TRUE)