r - 重复/复制数据框的特定行并追加
问题描述
我想根据数据框中的信息复制某一行。更喜欢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
解决方案
您可以选择要复制的行并将其添加到原始数据框:
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)
}
推荐阅读
- timer - STM32F4 Timer6寄存器未设置
- android - 警告:“onCreateView”总是返回非空类型
- c# - 使用 ASP.NET MVC 根据从级联下拉列表中选择的值填充文本框
- php - phpcs:引用的嗅探“PHPCompatibility.PHP.RemovedExtensions”不存在
- node.js - 排行榜命令中未定义的用户名 [ quick.db / discord.js ]
- ios - Self 是泛型的协议扩展
- azure-iot-hub - 将 mosquitto 代理与 Azure IoT 中心桥接时意外连接重置
- c - 在堆栈中使用 strcpy() 失败
- reporting-services - 使用参数作为过滤器 - 多个值不起作用
- ruamel.yaml - ruamel.yaml.cmd rt 打破列表,如果包含长字符串或哈希