我有一个数据框,看起来像:
Subject = c(1,1,1,1,2,2,2,2)
OBS = c(1.3,2.4,3.3,4.2,1.2,2.7,3.6,4.9)
REFDATE = as.Date(c('2013-09-25', '2013-09-25', '2013-09-26', '2013-09-26', '2013-09-27', '2013- 09-27', '2013-09-30', '2013-09-30'))
df1 = data.frame(Subject, OBS, REFDATE)
我想添加一个新列(REFDATE2),该列仅包含每个主题的最早REFDATE,得出以下结果:
Subject = c(1,1,1,1,2,2,2,2)
OBS = c(1.3,2.4,3.3,4.2,1.2,2.7,3.6,4.9)
REFDATE = as.Date(c('2013-09-25', '2013-09-25', '2013-09-26', '2013-09-26', '2013-09-27', '2013- 09-27', '2013-09-30', '2013-09-30'))
REFDATE2 = as.Date(c('2013-09-25', '2013-09-25', '2013-09-25', '2013-09-25', '2013-09-27', '2013- 09-27', '2013-09-27', '2013-09-27'))
df2 = data.frame(Subject, OBS, REFDATE, REFDATE2)
数据集中有相当多的主题。我怀疑某种可以识别最早日期的循环函数可以解决这个问题吗?
任何帮助将非常感激。
顺祝商祺
k
或使用data.table
包(也方便快捷)
library(data.table)
df1 <- as.data.frame(data.table(df1)[, REFDATE2:= min(REFDATE), by = Subject])
df1
# Subject OBS REFDATE REFDATE2
# 1 1 1.3 2013-09-25 2013-09-25
# 2 1 2.4 2013-09-25 2013-09-25
# 3 1 3.3 2013-09-26 2013-09-25
# 4 1 4.2 2013-09-26 2013-09-25
# 5 2 1.2 2013-09-27 2013-09-27
# 6 2 2.7 2013-09-27 2013-09-27
# 7 2 3.6 2013-09-30 2013-09-27
# 8 2 4.9 2013-09-30 2013-09-27
根据OP的要求,如果您想增加时间而不是as.Date
do as.POSIXct
,那么类似:
Subject = c(1,1,1,1,2,2,2,2)
OBS = c(1.3,2.4,3.3,4.2,1.2,2.7,3.6,4.9)
REFDATE = as.POSIXct(c('2013-09-25 08:30:00', '2013-09-25 08:30:00', '2013-09-26 08:30:00', '2013-09-26 08:30:00', '2013-09-27 08:30:00', '2013-09-27 08:30:00', '2013-09-30 08:30:00', '2013-09-30 08:30:00'))
df1 = data.frame(Subject, OBS, REFDATE)
library(data.table)
df1 <- as.data.frame(data.table(df1)[, REFDATE2:= min(REFDATE), by = Subject])
df1
# Subject OBS REFDATE REFDATE2
# 1 1 1.3 2013-09-25 08:30:00 2013-09-25 08:30:00
# 2 1 2.4 2013-09-25 08:30:00 2013-09-25 08:30:00
# 3 1 3.3 2013-09-26 08:30:00 2013-09-25 08:30:00
# 4 1 4.2 2013-09-26 08:30:00 2013-09-25 08:30:00
# 5 2 1.2 2013-09-27 08:30:00 2013-09-27 08:30:00
# 6 2 2.7 2013-09-27 08:30:00 2013-09-27 08:30:00
# 7 2 3.6 2013-09-30 08:30:00 2013-09-27 08:30:00
# 8 2 4.9 2013-09-30 08:30:00 2013-09-27 08:30:00
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句