第一次问问题(温柔点),因为我还没有找到任何有用的东西。
在R中,我有两个数据帧。一个(DataFrameA)有一列带有唯一日期列表。另一个(DataFrameB)也有日期列表。但是DataFrameB中的某些日期在DataFrameA中可能不存在。在这种情况下,我想将DataFrameB中的日期更新为DataFrameA中的最小日期,该日期大于DataFrameB中的日期。
在SQL中,我可能会这样做:
Select MyDate as OldDate,
(select min(MyDate) from DataFrameA where MyDate >= B.MyDate) as NewDate
from DataFrameB as B
我的目标是用DataFrameA中的正确值更新DataFrameB的每一行中的MyDate列。
因此,如果数据帧 B 以
2019-01-01
2019-01-02
2019-01-03
2019-01-04
2019-01-05
而DataFrameA只有
2019-01-01
2019-01-03
2019-01-05
DataFrameB最终会看起来像
2019-01-01
2019-01-03
2019-01-03
2019-01-05
2019-01-05
提前感谢。
我会使用简单的数据帧操作:
#prepare the data frames:
a <- data.frame(as.Date("2019-01-01") + 0:4)
b <- data.frame(c(a[1],a[3],a[5]))
#filter the a based on b
for (i in 1:nrow(a)) {
pos <- min(which(b[,1] >= a[i,1]))
a[i,1] <- b[pos,1]
}
#done
print(a)
OP直接提出的SQL解决方案可以在R中使用< code>sqldf包实现:
library(sqldf)
sqldf("Select MyDate as OldDate,
(select min(MyDate) from DataFrameA where MyDate >= B.MyDate) as NewDate
from DataFrameB as B")
OldDate NewDate
1 2019-01-01 2019-01-01
2 2019-01-02 2019-01-03
3 2019-01-03 2019-01-03
4 2019-01-04 2019-01-05
5 2019-01-05 2019-01-05
请注意,<code>MyDate</code>是OP在注释中提到的字符日期(实际上,它们是<code>factor</code>类型,因为<code>data.frame()</code>默认情况下将字符串转换为factor。)
DataFrameB <- data.frame(MyDate = as.character(as.Date("2019-01-01") + 0:4))
DataFrameA <- DataFrameB[c(TRUE, FALSE), , drop = FALSE]
我们可以使用非Equi连接与data.table
library(data.table)
dates <- setDT(dfA)[dfB, min(date),on = .(date >= date),
allow.cartesian = TRUE, by = .EACHI]$V1
dfB$date <- dates
dfB
# date
#1: 2019-01-01
#2: 2019-01-03
#3: 2019-01-03
#4: 2019-01-05
#5: 2019-01-05
或者使用findInterval
frombase R
dfA$date[findInterval(dfB$date, dfA$date, left.open = TRUE) + 1]
#[1] "2019-01-01" "2019-01-03" "2019-01-03" "2019-01-05" "2019-01-05"
dfB <- structure(list(date = structure(c(17897, 17898, 17899, 17900,
17901), class = "Date")), row.names = c(NA, -5L), class = "data.frame")
dfA <- structure(list(date = structure(c(17897, 17899, 17901),
class = "Date")), row.names = c(NA,
-3L), class = "data.frame")
我有两个熊猫数据框 步骤2:对于flag=1的行,AA_new将计算为var1(来自df2)*组“A”和val“AA”的df1的'cal1'值*组“A”和val“AA”的df1的'cal2'值,类似地,AB_new将计算为var1(来自df2)*组“A”和val“AB”的df1的'cal1'值*组“A”和val“AB”的df1的'cal2'值 我的预期输出如下所示: 以下基于其他stackflow
我有这样一个数据帧: 我如何摆脱第四行,因为它有sq_resid的最大值?注意:最大值将从一个数据集更改到另一个数据集,所以仅仅删除第4行是不够的。 我已经尝试了一些方法,比如我可以删除像下面这样留下数据帧的最大值,但是无法删除整行。
本文向大家介绍如何确定R数据帧列中具有最小值和最大值的行?,包括了如何确定R数据帧列中具有最小值和最大值的行?的使用技巧和注意事项,需要的朋友参考一下 在数据分析中,我们经常需要确定最小值和最大值,因为这些值有助于我们理解所考虑的列或变量的限制。可以通过在单个方括号中使用which.max表示最大值,并使用which.min表示最小值来提取行。 示例 请看以下数据帧- 输出结果 确定具有特定列的最
本文向大家介绍如何在R数据帧的列中查找唯一值?,包括了如何在R数据帧的列中查找唯一值?的使用技巧和注意事项,需要的朋友参考一下 分类变量具有多个类别,但是如果数据集很大且类别也很大,那么识别它们就会有些困难。因此,我们可以为分类变量提取唯一值,这将有助于我们轻松识别分类变量的类别。我们可以通过对R数据帧的每一列使用唯一的方法来做到这一点。 示例 请看以下数据帧- 在列x1中找到唯一值- 在列x2中
本文向大家介绍如何基于R数据帧列的值获取行索引?,包括了如何基于R数据帧列的值获取行索引?的使用技巧和注意事项,需要的朋友参考一下 R数据帧的一行可以在列中具有多种方式,并且这些值可以是数字,逻辑,字符串等。基于行号查找值很容易,但是基于值查找行号却很不同。如果要在特定列中查找特定值的行号,则可以提取整行,这似乎是一种更好的方法,可以使用单个方括号来获取行的子集。 示例 请看以下数据帧- 输出结果
我有一个pandas dataframe,需要根据dataframe中其他列的值创建新列。这是数据帧 人城市国家国家 美国伊利诺伊州芝加哥 美国亚利桑那州凤凰城B酒店 C美国加利福尼亚州圣地亚哥 我想根据state中的值创建两个新列 创建新列df[“城北”]=df[“城市”]其中state=“伊利诺伊” 创建新列df[“城市南部”]=df[“城市”],其中州不等于“伊利诺伊州” 我试过了 但是不等