我有以下数据样本
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 Y
11/12/2016 11/12/2016
12/12/2016 NA
13/12/2016 13/12/2016
14/12/2016 14/12/2016
15/12/2016 NA
16/12/2016 NA
17/12/2016 NA
我已经尝试了以下代码但未获得所需的输出
> 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 }
答案 0 :(得分:5)
试试这个:
> 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")
> 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>
答案 1 :(得分:0)
您可以使用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)
或者,如果您喜欢tidyverse
- 方法:
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)
重要的是,您要复制要匹配的列并相应地命名,或使用by
- 参数。
答案 2 :(得分:-1)
得到了答案!
你想要的是&#34;匹配&#34;另一个向量的一个长向量的值。为此,函数match
是完美的,因为返回匹配元素的向量位置。首先,输入数据(我添加了一些更正):
# 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")
然后,我根据长向量Z
创建data.frame X
,并添加向量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)])
希望这有帮助。