r - 用 R 中另一个数据框的特定值替换行中的值
问题描述
我有一个包含三列的数据框df df 数据框:ID、Range 和 Min_Range(最后一列是我要查找的结果)。我想通过将 df$Range 中的非 NA 值替换为 Min_Range_df 数据帧Min_Range_df 数据集的相应(到 ID)Min_Range_df$Min_Range 值来获取 df$Min_Range 列。另一种看待它的方法是,我想按组 (ID) 获取最小值 df$Range 并用最小值替换 Range 值。
df <- matrix(data=c(1,1,1,2,2,3,3,3,3,4,4,10,15,20,30,35,40,45,50,NA,NA,NA,10,10,10,30,30,40,40,40,NA,NA,NA), ncol = 3)
colnames(df) <- c("ID", "Range", "Min_Range")
Min_Range_df <- matrix(data= c(1,2,3,10,30,40), ncol=2)
colnames(Min_Range_df) <- c("ID", "Min_Range")
谢谢!!
解决方案
First to get the Min_Range_df
Min_Range_df <- aggregate(Range ~ ID, df, min)
ID Range
1 1 10
2 2 30
3 3 40
Then using it to make your new column
df[,"Min_Range"] <- NA
df[,"Min_Range"][!is.na(df[,"Range"])] <- unlist(lapply(df[,"ID"][!is.na(df[,"Range"])], function(x) Min_Range_df$Range[grep(x,Min_Range_df$ID)]))
ID Range Min_Range
[1,] 1 10 10
[2,] 1 15 10
[3,] 1 20 10
[4,] 2 30 30
[5,] 2 35 30
[6,] 3 40 40
[7,] 3 45 40
[8,] 3 50 40
[9,] 3 NA NA
[10,] 4 NA NA
[11,] 4 NA NA
推荐阅读
- c# - Php 返回与 C# 不同的 pbkdf2
- html - 用于 renderMarkdown 的 BotFramework-Webchat 中间件
- python - 如何在不覆盖先前值的情况下将循环写入数据帧
- python - 我应该做什么而不是使用全局变量?
- java - 如何将whatsapp上的图像和文本分享给特定号码?
- python-3.x - 使用 python3 和 pyautogui 自动化创建社交媒体帐户
- javascript - 无法为此侧边菜单设置过渡速度
- ios - 如何在 SwiftUI 中获取 tabBar 的高度
- c# - 如何将这些合并到 1 个函数中
- python - 查找值落在 PySpark Dataframe 中特定列之间的所有列的列表