首页 > 解决方案 > 重复/复制数据框的特定行并追加

问题描述

我想根据数据框中的信息复制某一行。更喜欢tidyverse解决方案。我想在不显式调用函数中的原始数据框的情况下完成此操作。

这是一个玩具示例。

data.frame(var1 = c("A", "A", "A", "B", "B"), 
           var2 = c(1, 2, 3, 4, 5), 
           val = c(21, 31, 54, 65, 76))
  var1 var2 val
1    A    1  21
2    A    2  31
3    A    3  54
4    B    4  65
5    B    5  76

到目前为止,我发现的所有解决方案都需要用户输入所需的行索引。我想找到一种以编程方式进行的方法。在这种情况下,我想复制var1“A”的最高值为“A”的行并附var2加到原始数据帧。预期的输出是

  var1 var2 val
1    A    1  21
2    A    2  31
3    A    3  54
4    B    4  65
5    B    5  76
6    A    3  54

标签: r

解决方案


您可以选择要复制的行并将其添加到原始数据框:

library(dplyr)

var1_variable <- 'A'
df %>%
  filter(var1 == var1_variable) %>%
  slice_max(var2, n = 1) %>%
  #For dplyr < 1.0.0
  #slice(which.max(var2)) %>%
  bind_rows(df, .)

#  var1 var2 val
#1    A    1  21
#2    A    2  31
#3    A    3  54
#4    B    4  65
#5    B    5  76
#6    A    3  54

在基础 R 中,可以这样做:

df1 <- subset(df, var1 == var1_variable)
rbind(df, df1[which.max(df1$var2), ])

这篇文章中,我们可以将之前的工作保存在一个临时变量中,然后绑定行,这样我们就不会破坏链,也不会绑定原始数据框df

df %>%
  #Previous list of commands
  {
    {. -> temp} %>%
      filter(var1 == var1_variable) %>%
      slice_max(var2, n = 1) %>%
      bind_rows(temp)
  }

推荐阅读