[英]How Do I add column to data frame that uses a mathematical equation with variables from the existing columns?
[英]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.