Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.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_Date - Fatal编程技术网

R 匹配两个长度不等的日期列

R 匹配两个长度不等的日期列,r,date,R,Date,我有以下数据样本 X <- c("11/12/2016", "12/12/2016", "13/12/2016","14/12/2016","15/12/2016","16/12/2016", "17/12/2016") Y <- c("11/12/2016", "13/12/2016", "14/12/2016", "18/12/2016") 我尝试了以下代码,但没有得到所需的输出 > X <- as.Date(data$X) > Y <- as.Date

我有以下数据样本

X <- c("11/12/2016", "12/12/2016", "13/12/2016","14/12/2016","15/12/2016","16/12/2016", "17/12/2016")
Y <- c("11/12/2016", "13/12/2016", "14/12/2016", "18/12/2016")
我尝试了以下代码,但没有得到所需的输出

> X <- as.Date(data$X)
> Y <- as.Date(data$Y)
> Z <- NA
> for (i in 1:length(X)) {
+ if(X[i] == Y){
+ Z <- Y}
+ else NA }
>X Y Z表示(i/1:长度(X)){
+如果(X[i]==Y){
+Z试试这个:

您的数据:
>xy试试这个:

您的数据:
>xy您可以使用
merge

X <- c("11/12/2016", "12/12/2016", "13/12/2016","14/12/2016","15/12/2016","16/12/2016", "17/12/2016")
Y <- c("11/12/2016", "13/12/2016", "14/12/2016", "18/12/2016")

df_X <- data.frame(X)

df_Y <- data.frame(X = Y, Y = Y)

merge(df_X, df_Y, all = TRUE)

重要的一点是,复制要匹配的列并相应地命名,或者使用
by
-参数。

可以使用
merge

X <- c("11/12/2016", "12/12/2016", "13/12/2016","14/12/2016","15/12/2016","16/12/2016", "17/12/2016")
Y <- c("11/12/2016", "13/12/2016", "14/12/2016", "18/12/2016")

df_X <- data.frame(X)

df_Y <- data.frame(X = Y, Y = Y)

merge(df_X, df_Y, all = TRUE)
重要的一点是,复制要匹配的列并相应地命名,或者使用
by
-参数。

得到了答案

您需要的是将一个长向量的值与另一个向量的值“匹配”。为此,函数
match
非常完美,因为它返回匹配元素的向量位置。首先,输入数据(我添加了一些更正):

希望这有帮助。

找到答案了

您需要的是将一个长向量的值与另一个向量的值“匹配”。为此,函数
match
非常完美,因为它返回匹配元素的向量位置。首先,输入数据(我添加了一些更正):


希望这有帮助。

您的输出与您的
X
Y
输入不匹配。根据您提供的数据,您应该在第一行中得到错误。
as.Date(X)
对不起,我的错误。现在编辑输入是否在
if(X[i]=Y)中缺少一个
[i]
?请注意,
11/12/2016=0.0004546958
。因此,它是一个
数字
而不是一个
日期
。将您的
日期
设置为如下字符串
“11/12/2016”
,然后将其转换为日期,如以下所示
as.date(“11/12/2016”,“d/%m/%Y”)
,最后使用您想要的格式
格式(as.date(“11/12/2016”),%d/%m/%Y”),%d/%m/%Y”)
您的输出与
X
Y
输入不匹配。根据您提供的数据,您应该会在第一行本身出现错误。
as.Date(X)
对不起,我的错误。现在编辑了输入,您只是在
if(X[i]=Y)中缺少了一个
[i]
?请注意,
11/12/2016=0.0004546958
。因此,它是一个
数字
而不是一个
日期
。将您的
日期
设置为如下字符串
“11/12/2016”
,然后将其转换为日期,如以下所示
as.date(“11/12/2016”,“d/%m/%Y”)
,最后使用您想要的格式
格式(as.date(“11/12/2016”),%d/%m/%Y”),%d/%m/%Y”)
你不需要
哪一个
。除此之外,这个解决方案应该被接受,而不是模仿Santi的解决方案。至少你从我这里得到+1;-)不幸的是,Santi给出了正确的另一个答案,尽管我先回答了:-(.我真的很感激你的+1,它对我帮助很大。你不需要
哪个
。除此之外,这个解决方案应该被接受,而不是模仿桑蒂的解决方案。至少你从我这里得到+1;-)不幸的是,桑蒂给出了正确的另一个答案,尽管我先回答了:(.我真的很感激你的+1,它对我帮助很大。
> Z<-rep(NA,length(X))
> Z[which(X %in% Y)]<-X[which(X %in% Y)]
> Z
[1] "11/12/2016" NA           "13/12/2016" "14/12/2016" NA           NA           NA 
> data.frame(X,Y=Z)
           X          Y
1 11/12/2016 11/12/2016
2 12/12/2016       <NA>
3 13/12/2016 13/12/2016
4 14/12/2016 14/12/2016
5 15/12/2016       <NA>
6 16/12/2016       <NA>
7 17/12/2016       <NA>
X <- c("11/12/2016", "12/12/2016", "13/12/2016","14/12/2016","15/12/2016","16/12/2016", "17/12/2016")
Y <- c("11/12/2016", "13/12/2016", "14/12/2016", "18/12/2016")

df_X <- data.frame(X)

df_Y <- data.frame(X = Y, Y = Y)

merge(df_X, df_Y, all = TRUE)
library(tidyverse)
X <- c("11/12/2016", "12/12/2016", "13/12/2016","14/12/2016","15/12/2016","16/12/2016", "17/12/2016")
Y <- c("11/12/2016", "13/12/2016", "14/12/2016", "18/12/2016")

df_X <- tibble(X)

df_Y <- tibble(X = Y, Y = Y)

full_join(df_X, df_Y)
# Input data
X <- c("11/12/2016", "12/12/2016", "13/12/2016","14/12/2016","15/12/2016","16/12/2016", "17/12/2016")
Y <- c("11/12/2016", "13/12/2016", "14/12/2016", "18/12/2016")

# Transform into dates
X <- as.Date(X,"%d/%m/%Y")
Y <- as.Date(Y, "%d/%m/%Y")
# Run function match so you can see what can of output generates
match(x = X, table = Y)

# Create data.frame
Z <- data.frame(X = X, 
                # add matched values
              Y = Y[match(x = X, table = Y)])