簡體   English   中英

如何將一列添加到 R 中使用多列和多行信息的數據框?

[英]How do I add a column to a data frame in R that uses information from multiple columns and rows?

我正在嘗試向我的數據框Bus78 uniM添加一列,稱為travel_time ,其中包含兩個相鄰行之間的時間差,加上偏差的差異。 到目前為止,為了做到這一點,我創建了一個 function Trav_time ,它需要四個輸入; 正在使用的數據集、行號和列號:

 Trav_time = function(df,i,j,k){ if((df[i,1]-df[i-1,1])==2){ trav_time = as.numeric(df[i,j]+df[i,k]-df[i-1,j]-df[i-1,k]) return(trav_time) } else if((df[i,1]-df[i-1,1])==5){ trav_time = as.numeric(df[i,j]+df[i,k]-df[i-1,j]-df[i-1,k]) return(trav_time) } else{ return(NA) } }

function 為數據框的每一行值返回正確的值(出於我的目的),但我找不到將所有單個值很好地連接到數據框的 rest 的方法。

到目前為止,我已經嘗試添加一個空行,然后使用 for 循環填充它:

 bus78_uniM['travel_time'] <- NA for(i in 2:nrow(bus78_uniM)){ bus78_uniM[i,11]<- bus78_uniM[Trav_time(bus78_uniM,i,5,6),11] }

但這會返回錯誤消息:


Error: Assigned data `bus78_uniM[Trav_time(bus78_uniM, i, 5, 6), 11]` must be compatible with row subscript `i`.
x 1 row must be assigned.
x Assigned data has 46955 rows.
i Row updates require a list value. Do you need `list()` or `as.list()`?

想知道是否有更好的方法來執行此操作,或者修改 function 的方法,以便我可以簡單地使用 dplyr function sapply() 代替。

在此先感謝您的任何提示!

編輯:數據集的快照:

在此處輸入圖像描述

如果travel_time應該包含連續行之間的差異,那么您可以使用dplyr::lag function。下面有一個示例。 我不清楚“行之間缺少行”的問題的本質是什么。 也許您可以提供實際數據的樣本(使用dput )並詳細描述問題。

library(tidyverse)
library(lubridate)

set.seed(124)
lags <- sample.int(100, 10)
departure <-  ymd_hms("2022-06-04 12:00:00")

tibble(sec = lags)  %>% 
  mutate(timestamp = departure + cumsum(sec)) %>% 
  mutate(lagged_timestamp = lag(timestamp, default = departure)) %>% 
  mutate(interval = timestamp - lagged_timestamp)
# A tibble: 10 × 4
     sec timestamp           lagged_timestamp    interval
   <int> <dttm>              <dttm>              <drtn>  
 1    65 2022-06-04 12:01:05 2022-06-04 12:00:00  65 secs
 2   167 2022-06-04 12:03:52 2022-06-04 12:01:05 167 secs
 3   155 2022-06-04 12:06:27 2022-06-04 12:03:52 155 secs
 4     5 2022-06-04 12:06:32 2022-06-04 12:06:27   5 secs
 5   134 2022-06-04 12:08:46 2022-06-04 12:06:32 134 secs
 6   173 2022-06-04 12:11:39 2022-06-04 12:08:46 173 secs
 7    74 2022-06-04 12:12:53 2022-06-04 12:11:39  74 secs
 8   161 2022-06-04 12:15:34 2022-06-04 12:12:53 161 secs
 9   143 2022-06-04 12:17:57 2022-06-04 12:15:34 143 secs
10    91 2022-06-04 12:19:28 2022-06-04 12:17:57  91 secs

我最終找到了解決方案。 感謝所有回復帖子的人 - 它確實幫助我將所有內容放在一起,我最終使用 for 循環創建了一個向量。 然后將向量添加到數據集。 還修改了原始的 function,以便所有輸出都是“數字”類型。

my_vec = c() for(i in 1:nrow(bus78_uniM)){ c<-Trav_time(bus78_uniM,i,5,6 my_vec<-c(my_vec,c)} bus78_uniM['travel_time'] <- my_vec

我為格式道歉 - 仍在學習如何使用 stack.overflow

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM