我有两个数据帧(DF1和DF2),我试图比较其中的值。
对于DF1中的每一行,我想比较DF2中每一行的第1列和第1列。对于每个匹配(DF1中的每个值可能有很多),我想用另外一个数据框(DF3)填充比较值所在行的值和DF2中匹配行的值。
以下是我一直在处理的代码。我知道我应该避免循环,不要介意嵌套循环,但我无法弄清楚任何其他方式或找到任何示例。
DF3 <- data.frame("id","DF1Timestamp","DF2Timestamp")
head(df1)
id timestamp
1 CA8058409291009 2015-07-10 15:25:31
2 CA8058402571009 2015-07-10 15:50:20
3 CA8323300811005 2015-07-10 16:18:52
4 CA8058402571009 2015-07-10 16:51:54
5 CA8323300811005 2015-07-10 16:54:03
head(df2)
id timestamp
1 CA8058402571009 2015-07-10 15:49:23
2 CA8323300811005 2015-07-10 16:18:37
3 CA8058402571009 2015-07-10 16:31:42
4 CA8058409291009 2015-07-10 16:34:34
5 CA8058402571009 2015-07-10 16:51:29
#sets the index used to identify row numbers in the DF3 table
index <- 1
for (i in 1:nrow(DF1)){
for (j in 1:nrow(DF2)){
if ((DF1[i,3]) == (DF2[j,3])) {
DF3 [[i,1]] <- (DF1[i,3])
DF3 [[i,2]] <- (DF1[i,2])
DF3 [[i,3]] <- (DF2[j,3])
index <- index +1
}
else{
#do nothing
}
}
}
我得到的所有结果都是
head(DF3)
ID. DF1timestamp DF2timestamp
1 <NA> <NA> <NA>
2 <NA> <NA> <NA>
3 <NA> <NA> <NA>
4 <NA> <NA> <NA>
5 <NA> <NA> <NA>
6 <NA> <NA> <NA>
我想要的是这个。
head(DF3)
id DF1Timestamp DF2Timestamp
1 CA8058409291009 2015-07-10 15:25:31 2015-07-10 16:34:34
2 CA8058402571009 2015-07-10 15:50:20 2015-07-10 16:31:42
3 CA8058402571009 2015-07-10 15:50:20 2015-07-10 16:51:54
4 CA8323300811005 2015-07-10 16:18:52 2015-07-10 16:18:37
5 CA8058402571009 2015-07-10 16:51:54 2015-07-10 15:49:23
6 CA8058402571009 2015-07-10 16:51:54 2015-07-10 16:31:42
7 CA8323300811005 2015-07-10 16:54:03 2015-07-10 16:18:37
此表显示的是第一次和事件发生在给定ID和事件结束的所有可能时间的行。
感谢任何帮助。
答案 0 :(得分:1)
我会使用merge()
df3 <- merge(df1, df2, by.x = 'id', by.y = 'id')
> df3
id date.x date.y
1 CA8058402571009 2015-07-10 15:50:20 2015-07-10 15:49:23
2 CA8058402571009 2015-07-10 15:50:20 2015-07-10 16:31:42
3 CA8058402571009 2015-07-10 15:50:20 2015-07-10 16:51:29
4 CA8058402571009 2015-07-10 16:51:54 2015-07-10 15:49:23
5 CA8058402571009 2015-07-10 16:51:54 2015-07-10 16:31:42
6 CA8058402571009 2015-07-10 16:51:54 2015-07-10 16:51:29
7 CA8058409291009 2015-07-10 15:25:31 2015-07-10 16:34:34
8 CA8323300811005 2015-07-10 16:18:52 2015-07-10 16:18:37
9 CA8323300811005 2015-07-10 16:54:03 2015-07-10 16:18:37