我有两个数据帧,我需要将表1的值与表2的值进行比较。
Table 1: (each value correspoding one task)
Value: 5 10 15 20 25 30
Task: a b c d e f
Table 2: (each value corresponding one date)
Value: 4 6 8 12 16 18 22 27
Date: 3 5 8 9 11 18 20 19
当表1的值大于表2的值时,我想获取相应的任务和日期。例如:
table2$value[2] > table1$value[1]
的输出应该是任务a和日期3。
此外,当提取表1中的任务时,我想删除相应的行。例如,下一个循环应为:
Table 1:
Value: 10 15 20 25 30
Task: b c d e f
Table 2:
Value: 4 6 8 12 16 18 22 27
Date: 1 3 5 8 9 11 18 20 19
-->output:
table2$value[4]=12 > table1$value[1]= 10 -> output: task b and date 9
for (i in 1:length(Table2$value)) {
for (a in 1:length(Table1$value)) {
if (Table2$value[i]>Table1$value[a]){
x<-table2$date[i]
y<-table1$task[a]
newtable<-data.frame(x,y)
table1$value<-table1$value[-c(a)]
}
}
}
答案 0 :(得分:1)
以下是可重现的示例:
library(data.table)
tbl1 <- data.table(value=seq(5, 30, 5), task=letters[1:6])
tbl2 <- data.table(value=c(4, 6, 8, 12, 16, 18, 22, 27),
date=c(3, 5, 8, 9, 11, 18, 20, 19))
tbl1
## value task
## 1: 5 a
## 2: 10 b
## 3: 15 c
## 4: 20 d
## 5: 25 e
## 6: 30 f
tbl2
## value date
## 1: 4 3
## 2: 6 5
## 3: 8 8
## 4: 12 9
## 5: 16 11
## 6: 18 18
## 7: 22 20
## 8: 27 19
此答案不是使用循环(并非存在任何问题),而是使用“滚动联接”从value
中查找tbl2
,该变量大于{{1 }},并返回相应的tbl1
和date
:
task
有关示例滚动联接的说明,请参见this blog post from Ben Gorman。
答案 1 :(得分:0)
非常感谢。这几乎是我想要的输出。但是,我只计算最接近the value of table 2
的{{1}}。
我的预期输出是:
value of table 1
如果value date task
5 5 a
10 9 b
15 11 c
20 20 d
25 19 e
30 NA f
中已经提取了task
,我想将其删除并从tbl1
的第二个value
开始计数。