使用一个data.frame中的数据为R中另一个data.frame中的新列生成值

使用一个data.frame中的数据为R中另一个data.frame中的新列生成值,r,R,我有两个数据帧,一个包含时间戳和气温 air_temp time_stamp 85.1 1396335600 85.4 1396335860 另一个包含开始时间、结束时间、位置坐标和规范名称 startTime endTime location.lat location.lon name 1396334278 1396374621 37.77638 -122.4176 Work 1396375256 1

我有两个数据帧,一个包含时间戳和气温

air_temp  time_stamp
85.1      1396335600
85.4      1396335860
另一个包含开始时间、结束时间、位置坐标和规范名称

startTime    endTime       location.lat    location.lon    name
1396334278   1396374621    37.77638        -122.4176       Work
1396375256   1396376369    37.78391        -122.4054       Work
对于第一个数据帧中的每一行,我想确定它位于第二个数据帧中的哪个时间范围,即如果时间戳1396335600介于起始时间1396334278和结束时间1396374621之间,则将位置和名称值添加到第一个数据帧中的行中

第二个数据帧中的开始时间和结束时间不重叠,并且呈线性增加。但是它们不是完全连续的,所以如果时间戳落在两个时间段之间,我需要将位置标记为NA。如果在开始时间和结束时间之间匹配,我想将location.lat、location.lon和name列添加到第一个数据帧中

感谢您的帮助。

试试这个。没有测试

newdata <- data2[data1$timestamp>=data2$startTime & data1$timestamp<=data2$endTime  ,3:5]
data1 <- cbind(data1[data1$timestamp>=data2$startTime & data1$timestamp<=data2$endTime,],newdata)

newdata=data2$startTime&data1$timestamp
rowidx有趣的问题。。。原来比我原来想的要复杂!!
步骤1:设置数据

DF1 <- read.table(text="air_temp  time_stamp
85.1      1396335600
85.4      1396335860",header=TRUE)

DF2 <- read.table(text="startTime    endTime       location.lat    location.lon    name
1396334278   1396374621    37.77638        -122.4176       Work
1396375256   1396376369    37.78391        -122.4054       Work",header=TRUE)
步骤3:合并两个数据帧:

DF1 <- cbind(DF1,DF2[index,3:5])
row.names(DF1) <- 1:nrow(DF1)
DF1

DF1查看
which()。否则,请利用你的时间。谢谢你的礼貌。哇,你快10万了。谢谢你的帮助!除第一行外,我正在获取所有行的NAs。详细查看了这一行。结果是我跳了枪。我的代码返回NA,因为它只比较相同行中的数据。您需要像其他人一样在sapply中执行which循环或使用which,以便可以比较DF1中的每一行和DF2中的每一行。我可以修复这段代码,但它看起来与其他代码几乎相同,所以只需使用其中一段代码即可。我预测,由于您必须将所有行与所有行进行比较,因此,如果数据较大,代码可能会变慢。如果发生这种情况,您可以研究排序数据和启动循环的方法,这些循环在上一个循环中停止。谢谢!很有魅力
index <- sapply(DF1$time_stamp, 
       function(i) {
         dec <- which(i >= DF2$startTime & i <= DF2$endTime)
         ifelse(length(dec) == 0, NA, dec)
         }
       )
index
DF1 <- cbind(DF1,DF2[index,3:5])
row.names(DF1) <- 1:nrow(DF1)
DF1