将一个数据框的索引值替换为另一个数据框的日期

时间:2017-09-06 08:45:45

标签: r dataframe

我需要使用另一个数据框的日期( date.index )更改给定数据框( fruits.df )的索引值。

示例数据:

# fruits.df    
x <- 1:5
y <- 1:12
z <- 1:16
w <- 1:7
fruits.list <- list(Apples = x, Bananas = y, Grapes = z, Kiwis = w)

library(qpcR)
fruits.df <- do.call(qpcR:::cbind.na, lapply(
   fruits.list, data.frame))

names(fruits.df) <- names(fruits.list)

这会产生以下日期框架:

enter image description here

日期索引数据框的示例数据:

date.index <- data.frame(Days = seq(as.Date("2017-07-01"), 
  as.Date("2017-07-20"), by = 1), index = as.integer(1:20))

所以我需要的是以下内容:

enter image description here

我已尝试使用dplyr的过滤器功能,但只有在我明确选择列时才有效。

不起作用:

filtered_found_Index <- filter(date.index, index %in% 
    fruits.df)

有效,但我需要与整个df同时进行:

filtered_found_Index <- filter(date.index, index %in% 
    fruits.df$**Bananas**)

1 个答案:

答案 0 :(得分:3)

您可以在match的每一列上使用fruits.df,即

fruits.df[] <- lapply(fruits.df, function(i) date.index$Days[match(i, date.index$index)])

给出,

       Apples    Bananas     Grapes      Kiwis
1  2017-07-01 2017-07-01 2017-07-01 2017-07-01
2  2017-07-02 2017-07-02 2017-07-02 2017-07-02
3  2017-07-03 2017-07-03 2017-07-03 2017-07-03
4  2017-07-04 2017-07-04 2017-07-04 2017-07-04
5  2017-07-05 2017-07-05 2017-07-05 2017-07-05
6        <NA> 2017-07-06 2017-07-06 2017-07-06
7        <NA> 2017-07-07 2017-07-07 2017-07-07
8        <NA> 2017-07-08 2017-07-08       <NA>
9        <NA> 2017-07-09 2017-07-09       <NA>
10       <NA> 2017-07-10 2017-07-10       <NA>
11       <NA> 2017-07-11 2017-07-11       <NA>
12       <NA> 2017-07-12 2017-07-12       <NA>
13       <NA>       <NA> 2017-07-13       <NA>
14       <NA>       <NA> 2017-07-14       <NA>
15       <NA>       <NA> 2017-07-15       <NA>
16       <NA>       <NA> 2017-07-16       <NA>