【发布时间】:2018-07-25 09:04:52
【问题描述】:
我有两个数据框,df1 和 df2。我想以某种方式加入这两个,我将目标值从df2 添加到df1。 df1 和 df2 通过列组和值关联。在df1 中,我有一个特定的值,在df2 中,我只有适用值的下限和上限。
如果我们查看df1 和df2,我相信任务应该很清楚。
df1 <- data.frame(group = c("A","B","C","D"),
value = c(15, 0, 40, 70))
df2 <- data.frame(group = c("A","A","A","A",
"B","B","B","B",
"C","C","C","C",
"D","D","D","D"),
lower_limit = c(0, 25, 60, 91,
0, 35, 70, 92,
0, 45, 80, 93,
0, 55, 90, 94),
upper_limit = c(25, 60, 91, 100,
35, 70, 92, 100,
45, 80, 93, 100,
55, 90, 94, 100),
target = c("AGE0", "AGE1", "AGE3", "AGE4",
"AGE0", "AGE1", "AGE3", "AGE4",
"AGE0", "AGE1", "AGE3", "AGE4",
"AGE0", "AGE1", "AGE3", "AGE4"))
使用嵌套的 for 和 if 循环,我可以执行此任务。但是我的原始数据要大得多,我不能使用这个循环。我确信我的任务有一个更简单的解决方案。有什么建议吗?
for (i in 1:nrow(df1)){
subset_string = df1[i, 1]
target_value = df1[i, 2]
df2_subset <- df2[df2$group == subset_string, ]
for (j in 1:nrow(df2_subset)){
temp_sequence <- seq(from = df2_subset[j, 2], to = df2_subset[j, 3] - 1)
if (target_value %in% temp_sequence){
target_string <- df2_subset[j, 4]
}
df1[i, 3] <- target_string
}
}
【问题讨论】: