Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 从不同的行中减去值_R - Fatal编程技术网

R 从不同的行中减去值

R 从不同的行中减去值,r,R,我一直在尝试将我的计算从excel移到R,只是想知道是否有一种方法可以复制,如果有步骤的话 下面是我的数据,我在excel中用简单公式得到的结果在DIFF column=IFA2=A3,C2-B3*24,0中 我一直在尝试R,但运气不佳。获取数据帧的代码如下所示: library(data.table) library(lubridate) NO <- c("AAA", "AAA", "AAA", "AAA", "AAA", "BBB", "BBB", "BBB", "BBB", "BB

我一直在尝试将我的计算从excel移到R,只是想知道是否有一种方法可以复制,如果有步骤的话

下面是我的数据,我在excel中用简单公式得到的结果在DIFF column=IFA2=A3,C2-B3*24,0中

我一直在尝试R,但运气不佳。获取数据帧的代码如下所示:

library(data.table)
library(lubridate)

NO <- c("AAA", "AAA", "AAA", "AAA", "AAA", "BBB", "BBB", "BBB", "BBB", "BBB")
T_DATE <- c( "10/08/2019 17:02:00",  "10/08/2019 14:45:00", "10/08/2019 03:23:00",  "09/08/2019 17:06:00", "08/08/2019 23:29:00",  "08/08/2019 09:34:00", "07/08/2019 23:05:00", "07/08/2019 12:07:00", "06/08/2019 22:06:00", "06/08/2019 10:07:00")

L_DATE <- c( "10/08/2019 20:35:00", "10/08/2019 15:10:00","10/08/2019 10:25:00", "10/08/2019 01:11:00","09/08/2019 10:27:00", "08/08/2019 21:19:00","08/08/2019 06:09:00","07/08/2019 20:25:00", "07/08/2019 08:53:00", "06/08/2019 19:44:00")

df <- data.frame(NO, T_DATE, L_DATE)

rm(DIFF,L_DATE,NO,T_DATE)

我不知道如何添加使用最上面一行的L_日期和随后的T_日期第2行的步骤,因此第一次计算是2019年8月10日20:35:00-2019年8月10日14:45:00,如果两个数字相同。

抱歉,将您的公式误读为C2-C3,而不是C2-B3。下面稍作修改,以纠正这一点

图书馆弹琴 联吡啶酯 df% 组_byNO%>% mutateDIFF=时间差日期,leadT\u日期,单位=小时 >一个tibble:10x4 >组别:NO[2] >无T_日期L_日期差异 > >1 AAA 2019-08-10 17:02:00 2019-08-10 20:35:00 5.833333小时 >2 AAA 2019-08-10 14:45:00 2019-08-10 15:10:00 11.783333小时 >3 AAA 2019-08-10 03:23:00 2019-08-10 10:25:00 17.316667小时 >美国汽车协会2019-08-09 17:06:00 2019-08-10 01:11:00 25.700000小时 >美国汽车协会2019-08-08 23:29:00 2019-08-09 10:27:00北美时间 >6 BBB 2019-08-08 09:34:00 2019-08-08 21:19:00 22.233333小时 >7 BBB 2019-08-07 23:05:00 2019-08-08 06:09:00 18.033333小时 >8 BBB 2019-08-07 12:07:00 2019-08-07 20:25:00 22.316667小时 >9 BBB 2019-08-06 22:06:00 2019-08-07 08:53:00 22.766667小时 >10 BBB 2019-08-06 10:07:00 2019-08-06 19:44:00北美时间 除difftime外,您还可以使用ifelse:

联吡啶酯 df$T_日期=mdy_hmsT_日期 df$L_日期=mdy_hmsL_日期 图书馆管理员 df%>%mutateDiff=ifelseleadNO==NO,L_日期-leadT_日期,0 无T_日期L_日期差异 美国汽车协会2019-10-08 17:02:00 2019-10-08 20:35:00 5.833333 2 AAA 2019-10-08 14:45:00 2019-10-08 15:10:00 11.783333 3 AAA 2019-10-08 03:23:00 2019-10-08 10:25:00 713.316667 美国汽车协会2019-09-08 17:06:00 2019-10-08 01:11:00 1441.700000 5 AAA 2019-08-08 23:29:00 2019-09-08 10:27:00 0.000000 6 BBB 2019-08-08 09:34:00 2019-08-08 21:19:00 742.233333 7 BBB 2019-07-08 23:05:00 2019-08-08 06:09:00 738.033333 英国广播公司2019-07-08 12:07:00 2019-07-08 20:25:00 718.316667 9 BBB 2019-06-08 22:06:00 2019-07-08 08:53:00 718.766667 英国广播公司2019-06-08 10:07:00 2019-06-08 19:44:00北美 在base中,您可以将T_日期和L_日期转换为POSIXct:

这是一组最后一行的NA。如果需要0,可以使用:

df$DIFF  <- ifelse(df[,1] == df[2:11,1] & !is.na(df[2:11,1]), df[,3] - df[2:11,2], 0)
为确保时差以小时为单位,请使用单位为小时的difftime

使用tidyverse:

我使用as.POSIXct将您的数据转换为日期-时间格式,然后取下您的等式并应用它,结果是:

 NO              T_DATE              L_DATE  DIFF      diff_r
AAA 2019-10-08 17:02:00 2019-10-08 20:35:00  5.83    5.833333
AAA 2019-10-08 14:45:00 2019-10-08 15:10:00 11.78   11.783333
AAA 2019-10-08 03:23:00 2019-10-08 10:25:00 17.32  713.316667
AAA 2019-09-08 17:06:00 2019-10-08 01:11:00 25.70 1441.700000
AAA 2019-08-08 23:29:00 2019-09-08 10:27:00  0.00    0.000000
BBB 2019-08-08 09:34:00 2019-08-08 21:19:00 22.23  742.233333
BBB 2019-07-08 23:05:00 2019-08-08 06:09:00 18.03  738.033333
BBB 2019-07-08 12:07:00 2019-07-08 20:25:00 22.32  718.316667
BBB 2019-06-08 22:06:00 2019-07-08 08:53:00 22.77  718.766667
BBB 2019-06-08 10:07:00 2019-06-08 19:44:00  0.00          NA

我是美国人,假设您的数据是m/D/Y,但如果不是,那么您可以将其转换为D/m/Y。

@GKi没有回答我问题的主要部分。如何获得第一次约会-第二次约会
df$DIFF  <- ifelse(df[,1] == df[2:11,1], df[,3] - df[2:11,2], NA)
df
#    NO              T_DATE              L_DATE      DIFF
#1  AAA 2019-08-10 17:02:00 2019-08-10 20:35:00  5.833333
#2  AAA 2019-08-10 14:45:00 2019-08-10 15:10:00 11.783333
#3  AAA 2019-08-10 03:23:00 2019-08-10 10:25:00 17.316667
#4  AAA 2019-08-09 17:06:00 2019-08-10 01:11:00 25.700000
#5  AAA 2019-08-08 23:29:00 2019-08-09 10:27:00        NA
#6  BBB 2019-08-08 09:34:00 2019-08-08 21:19:00 22.233333
#7  BBB 2019-08-07 23:05:00 2019-08-08 06:09:00 18.033333
#8  BBB 2019-08-07 12:07:00 2019-08-07 20:25:00 22.316667
#9  BBB 2019-08-06 22:06:00 2019-08-07 08:53:00 22.766667
#10 BBB 2019-08-06 10:07:00 2019-08-06 19:44:00        NA
df$DIFF  <- ifelse(df[,1] == df[2:11,1] & !is.na(df[2:11,1]), df[,3] - df[2:11,2], 0)
i  <- seq_len(nrow(df)) + 1
df$DIFF  <- ifelse(df$NO == df$NO[i], df$L_DATE - df$T_DATE[i], NA)
df$DIFF  <- ifelse(df$NO == df$NO[i], difftime(df$L_DATE, df$T_DATE[i], units = "hours"), NA)
df %>% 
mutate(T_DATE = as.POSIXct(T_DATE, format = "%m/%d/%Y  %H:%M:%S"), 
       L_DATE = as.POSIXct(L_DATE, format = "%m/%d/%Y  %H:%M:%S"), 
       diff_r = ifelse(NO == lead(NO), difftime(L_DATE, lead(T_DATE), units = "hours"), 0))
 NO              T_DATE              L_DATE  DIFF      diff_r
AAA 2019-10-08 17:02:00 2019-10-08 20:35:00  5.83    5.833333
AAA 2019-10-08 14:45:00 2019-10-08 15:10:00 11.78   11.783333
AAA 2019-10-08 03:23:00 2019-10-08 10:25:00 17.32  713.316667
AAA 2019-09-08 17:06:00 2019-10-08 01:11:00 25.70 1441.700000
AAA 2019-08-08 23:29:00 2019-09-08 10:27:00  0.00    0.000000
BBB 2019-08-08 09:34:00 2019-08-08 21:19:00 22.23  742.233333
BBB 2019-07-08 23:05:00 2019-08-08 06:09:00 18.03  738.033333
BBB 2019-07-08 12:07:00 2019-07-08 20:25:00 22.32  718.316667
BBB 2019-06-08 22:06:00 2019-07-08 08:53:00 22.77  718.766667
BBB 2019-06-08 10:07:00 2019-06-08 19:44:00  0.00          NA