Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.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
从一个data.frame中查找值,使用当前data.frame中的日期在另一个data.frame中创建列_R_Date_Dataframe_Lookup_Addition - Fatal编程技术网

从一个data.frame中查找值,使用当前data.frame中的日期在另一个data.frame中创建列

从一个data.frame中查找值,使用当前data.frame中的日期在另一个data.frame中创建列,r,date,dataframe,lookup,addition,R,Date,Dataframe,Lookup,Addition,我正在尝试从一个data.frame中选择要导入到另一个data.frame的列中的信息。要选择的值可以按行和列标识,并且取决于output data.frame现有列的计算。我被卡住了,因为有很多步骤需要组合,尽管我已经把它分解并准备好了零件,但我无法将最终的组合组合在一起 我的查找data.frame的格式如下: Date.Time <- rep(c("2014/05/06_pm", "2014/05/07_am", "2014/05/07_pm", "2014/05/08_am"),

我正在尝试从一个data.frame中选择要导入到另一个data.frame的列中的信息。要选择的值可以按行和列标识,并且取决于output data.frame现有列的计算。我被卡住了,因为有很多步骤需要组合,尽管我已经把它分解并准备好了零件,但我无法将最终的组合组合在一起

我的查找data.frame的格式如下:

Date.Time <- rep(c("2014/05/06_pm", "2014/05/07_am", "2014/05/07_pm", "2014/05/08_am"), 4)
Nest <- c(rep("WTSN08", 4), rep("WTSN26", 4), rep("WTSN07", 4), rep("WTSN06", 4))
value <- c(25, 24, 26, 25, 27, 27, 28, 26, 21, 23, 21, 20, 25, 28, 26, 28)
df <- data.frame(Date.Time, Nest, value)
library(reshape)
Lookup <- cast(df, Nest ~ Date.Time, row.names = FALSE)
Nest <- rep(c("WTSN08","WTSN26","WTSN07","WTSN06"), 2)
Hatch <- as.Date(rep(c("2014/04/28", "2014/04/29", "2014/04/29", "2014/04/25"),2))
Age <- c(9.5, 8.0, 8.5, 13.0, 10.0, 9.5, 9.5, 12.0)
Output <- data.frame(Nest, Hatch, Age)
将输出正确的日期,并且

paste(as.character(Output$Hatch + Output$Age), "am", sep = "_")
将在日期后附加“_am”,以便可以这样查找值

Lookup[Lookup$Nest == "WTSN08",as.character(paste(as.character(Output$Hatch + Output$Age), "am", sep = "_"))]

grepl("^.+(.5)$",Output$Age)
将返回以“.5”结尾的年龄位置

我尝试将其封装在ifelse命令中,最初只是为了获得计算的时间段的值(而不是担心减去天数),以形成列:

Output$T <- ifelse(grepl("^.+(.5)$",WTS_w$Age),
    Max.Ts[Max.Ts$Nest == as.character(WTS_w$Nest), paste(as.character(WTS_w$Hatch + WTS_w$Age), "pm", sep = "_")],
    Max.Ts[Max.Ts$Nest == as.character(WTS_w$Nest), paste(as.character(WTS_w$Hatch + WTS_w$Age), "am", sep = "_")]
)

Output$T我认为让用户知道我已经解决了这个问题可能会有帮助

最后,我将
查找
data.frame保留为熔化的形式,即:

df <- data.frame(Date.Time, Nest, value)
这样,在我已经实现的添加之后,它们可以与
输出
data.frame匹配

将其与包装在
match
中的
ifelse
命令结合起来,给出了当前时间段的值:

Output$T <- df$value[match(ifelse(grepl("^.+(.5)$",Output$Age),
                                  paste(Output$Nest, as.character(Output$Hatch + Output$Age), "pm", sep = "_"),
                                  paste(Output$Nest, as.character(Output$Hatch + Output$Age), "am", sep = "_"))
                                  ,paste(df$Nest, df$Date.Time, sep = "_"))]
输出$T
paste(df$Nest, df$Date.Time, sep = "_")
Output$T <- df$value[match(ifelse(grepl("^.+(.5)$",Output$Age),
                                  paste(Output$Nest, as.character(Output$Hatch + Output$Age), "pm", sep = "_"),
                                  paste(Output$Nest, as.character(Output$Hatch + Output$Age), "am", sep = "_"))
                                  ,paste(df$Nest, df$Date.Time, sep = "_"))]
Output$T1 <- df$value[match(ifelse(grepl("^.+(.5)$",Output$Age),
                                   paste(Output$Nest, as.character(Output$Hatch + Output$Age), "am", sep = "_"),
                                   paste(Output$Nest, as.character(Output$Hatch + Output$Age -1), "pm", sep = "_"))
                                   ,paste(df$Nest, df$Date.Time, sep = "_"))]