【发布时间】:2018-03-01 10:10:23
【问题描述】:
我有一个包含 35K 点和 2 列的数据框 (d1)。我有第二个数据框(d2),有 352 个点和 3 列。我一直在尝试做的是如果 d1$c1 和 d1$c2 等于 d2$c1 和 d2$c2,那么我想将 d2$c3 的值添加到 d1 的新列中(比如 d1$c3 )。 数据帧 d1 类似于下面的数据帧。 D2 基本上是 D1 的小版本,而 D1 的相同值重复了多次
**D1**
|C1 | C2 |
|---|:---:|
|1 |1 |
|1 |1 |
|1 |2 |
|2 |1 |
|2 |2 |
|2 |2 |
|2 |2 |
|3 |1 |
|3 |2 |
|3 |3 |
|3 |1 |
|3 |1 |
**D2**
|C1 | C2 | C3 |
|---|:---:|----:|
|1 |1 |a |
|1 |2 |b |
|1 |3 |c |
|2 |2 |b |
|3 |1 |c |
|3 |2 |a |
|3 |3 |b |
现在我想做的是这个
if((d1$c1 == d2$c1) & (d1$c2 == d2$c2))
{
d1$c3 = d2$c3
}
运行循环后,生成的 D1 应该类似于 D2 中的匹配条目,被添加到 D1 中的新列中
**D1**
|C1 | C2 | new C3|
|---|:---:|--------
|1 |1 |a
|1 |1 |a
|1 |2 |b
|2 |1 |a
|2 |2 |b
|2 |2 |b
|2 |2 |b
|3 |1 |c
|3 |2 |a
|3 |3 |b
|3 |1 |c
|3 |1 |c
但我最终会收到长度不匹配的错误。
我试过的代码是
for(i in 1:length(D1$c1))
{
if(((D1$C1 = D2$c1) & (D1$C2 = D2$c2))
{
D1$c3[i] = D2$c3
}
}
我还尝试使用一列创建一个新数据框以添加来自 D2 的值
x = data.frame(length(D1))
for(i in (D1$C1 & D1$C2))
{
for(j in D2$C1 & D2$C2)
{
if(i == j)
{
x = (D2$C3)
}
}
}
这两个都没有用。
【问题讨论】:
-
看来你要使用
merge函数