我有这样的矩阵(df1):
vid col1
103 9
103 3
103 7
103 6
104 7
104 8
104 9
105 6
105 8
106 8
106 9
106 4
106 6
我还有另一个矩阵(df2):
vid col1
103 0
104 1
105 5
106 3
我想将组分配给df1,以便组ID以基于vid的df2为条件。
即,我希望对df1进行以下操作,以获取所需的输出:
vid col1 col2
103 9 0
103 3 0
103 7 0
103 6 0
104 7 1
104 8 1
104 9 1
105 6 5
105 8 5
106 8 3
106 9 3
106 4 3
106 6 3
我正在尝试以下操作:
df1<-cbind(df1,0)
for (i in 1:nrow(df1)){
for(j in 1:nrow(df2))
{
if(df1[i,1]==df2[j,1]){
df1[i,3]=df2[j,2]
}
else{
df1[i,3]=NA
}
}
}
但这似乎不起作用,有人可以帮我吗?谢谢!
答案 0 :(得分:2)
您可以使用merge
将2个数据帧合并在一起
merge(df1, df2, by='vid')
输出应为
vid col1 col2
103 9 0
103 3 0
103 7 0
103 6 0
104 7 1
104 8 1
104 9 1
105 6 5
105 8 5
106 8 3
106 9 3
106 4 3
106 6 3
答案 1 :(得分:-1)
首先,您应该创建一个向量变量,该变量将成为最终数据帧的第三列。
Vec=vector()
我假设在这里,您只有4个ID,即
df2$vid
[1] 103 104 105 106
现在遍历第一数据帧 df1 的所有行时填充第三列。
for(i in 1:nrow(df1))
{
if(df1[i,1]==103){Vec[i]=df2[df2$vid==103,2]}
if(df1[i,1]==104){Vec[i]=df2[df2$vid==104,2]}
if(df1[i,1]==105){Vec[i]=df2[df2$vid==105,2]}
if(df1[i,1]==106){Vec[i]=df2[df2$vid==106,2]}
}
最后,将第三列与数据框 df1 合并。
df1=cbind(df1,Vec)