繁体   English   中英

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

[英]Using data in one data.frame to generate values for a new column in another data.frame in R

我有两个数据框,其中一个包含时间戳和air_temperature

air_temp  time_stamp
85.1      1396335600
85.4      1396335860

另一个包含startTime,endTime,位置坐标和规范名称。

startTime    endTime       location.lat    location.lon    name
1396334278   1396374621    37.77638        -122.4176       Work
1396375256   1396376369    37.78391        -122.4054       Work

对于第一个数据帧中的每一行,我想确定它位于第二个数据帧中的哪个时间范围,即,如果时间戳1396335600在startTime 1396334278和endTime 1396374621之间,则将位置和名称值添加到该行中在第一个data.frame中。

第二个数据帧中的开始时间和结束时间不重叠,并且线性增加。 但是它们不是完全连续的,因此,如果时间戳介于两个时间段之间,则需要将该位置标记为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)

如果时间戳不在startTime和endTime之间,则此方法将不返回任何值,因此从理论上讲,您返回的数据集可能比原始数据集短。 以防万一我用与data2相同的TRUE FALSE向量处理data1,所以它们的长度相同。

rowidx <- sapply(dfrm1$time_stamp, function(x) which( dfrm2$startTime <= x & dfrm2$endTime >= x) 
cbind(dfrm1$time_stamp. dfrm2[ rwoidx, c("location.lat","location.lon","name")]

我的也没有进行测试,并且看上去与CCurtis基本相似,因此请给他检查是否可行。

有趣的问题……原来比我原先想象的还要复杂!! 第一步:设置数据!

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)

步骤2:对于DF1每个time_stamp ,在DF2计算适当的index

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

希望这可以帮助!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM