在R中分配具有预分配条件的组

时间:2018-11-09 06:53:08

标签: r

我有这样的矩阵(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
    }

  }  
}

但这似乎不起作用,有人可以帮我吗?谢谢!

2 个答案:

答案 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)