Назначить группы с заданными условиями в R - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть такая матрица (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, чтобы идентификаторы групп были условными для df2 на основе vid.

А именно, я бы хотел следующую манипуляцию на 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 голосов
/ 09 ноября 2018

Во-первых, вы должны создать векторную переменную, эта переменная будет третьим столбцом вашего окончательного фрейма данных.

Vec=vector()

Я предполагаю, что у вас есть только 4 идентификатора, которые

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)
0 голосов
/ 09 ноября 2018

Вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...