根据日期条件将某些值设置为数据框
Set Certain Values to a Data Frame Based a Date Criteria
我想将值 NA
设置为特定 rows/columns 在特定日期之前发生的数据框中。但是每一列都有不同的date/criteria。那么这将如何工作?
示例数据框:
dates <- c("01/01/2015", "06/15/2015", "11/30/2015")
a <- c(1, 2, 3)
b <- c(2, 4, 6)
c <- c(3, 5, 9)
df <- data.frame(Date = dates, A = a, B = b, C = c)
startDate <- c("02/20/2015", "07/28/2015", "12/01/2015")
所以我的 data.frame 看起来像这样:
Date A B C
01/01/2015 1 2 3
06/15/2015 2 4 5
11/30/2015 3 6 9
使用 startDate
作为我的标准,我想将相关列中该日期之前的任何值设置为 NA
,以便我的最终结果如下所示:
Date A B C
01/01/2015 NA NA NA
06/15/2015 2 NA NA
11/30/2015 3 6 NA
有人可以帮助我吗?
顺便说一句,我真正的 data.frame 有大约 20 多列。以上只是我实际问题的一个小例子。
提前致谢!
测试一下:
#Do a pairwise comparison of dates using outer
m = matrix(
as.numeric(
outer(as.Date(as.character(df[,1]), format = "%m/%d/%Y"),
as.Date(as.character(startDate), format = "%m/%d/%Y"), ">" )
),
nrow = nrow(df))
m[m == 0] = NA #Set zeroes in m to NA
df[,2:ncol(df)] = df[,2:ncol(df)] * m #Multiply the columns of df (except 1st) with m
df
# Date A B C
#1 01/01/2015 NA NA NA
#2 06/15/2015 2 NA NA
#3 11/30/2015 3 6 NA
我想将值 NA
设置为特定 rows/columns 在特定日期之前发生的数据框中。但是每一列都有不同的date/criteria。那么这将如何工作?
示例数据框:
dates <- c("01/01/2015", "06/15/2015", "11/30/2015")
a <- c(1, 2, 3)
b <- c(2, 4, 6)
c <- c(3, 5, 9)
df <- data.frame(Date = dates, A = a, B = b, C = c)
startDate <- c("02/20/2015", "07/28/2015", "12/01/2015")
所以我的 data.frame 看起来像这样:
Date A B C
01/01/2015 1 2 3
06/15/2015 2 4 5
11/30/2015 3 6 9
使用 startDate
作为我的标准,我想将相关列中该日期之前的任何值设置为 NA
,以便我的最终结果如下所示:
Date A B C
01/01/2015 NA NA NA
06/15/2015 2 NA NA
11/30/2015 3 6 NA
有人可以帮助我吗? 顺便说一句,我真正的 data.frame 有大约 20 多列。以上只是我实际问题的一个小例子。
提前致谢!
测试一下:
#Do a pairwise comparison of dates using outer
m = matrix(
as.numeric(
outer(as.Date(as.character(df[,1]), format = "%m/%d/%Y"),
as.Date(as.character(startDate), format = "%m/%d/%Y"), ">" )
),
nrow = nrow(df))
m[m == 0] = NA #Set zeroes in m to NA
df[,2:ncol(df)] = df[,2:ncol(df)] * m #Multiply the columns of df (except 1st) with m
df
# Date A B C
#1 01/01/2015 NA NA NA
#2 06/15/2015 2 NA NA
#3 11/30/2015 3 6 NA