簡體   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