сравнить данные и пометить совпадения в r - PullRequest
0 голосов
/ 03 октября 2018

Я очень плохо знаком с R. Я пытаюсь сравнить два CSV-файла: CSV 1:

<table id="t01">
  <tr>
    <th>Firstname</th>
    <th>Lastname</th> 
    <th>Email</th>
  </tr>
  <tr>
    <td>Eve</td>
    <td>Jackson</td> 
    <td>evejackson@yahoo.co.uk</td>
  </tr>
    <tr>
    <td>Jon</td>
    <td>Smith</td> 
    <td>johnsmith@gmail.com</td>
  </tr>
</table>

csv2:

<table id="t02">
  <tr>
    <th>Firstname</th>
    <th>Lastname</th> 
    <th>Email</th>
  </tr>
  
    <tr>
    <td>Jon</td>
    <td>Smith</td> 
    <td>johnsmith@gmail.com</td>
  </tr>
  <tr>
    <td>Samantha</td>
    <td>Andrew</td> 
    <td>samanthaandrew@yahoo.co.uk</td>
  </tr>
</table>

Мне нужен код, который сравнивает «Электронная почта» между двумя таблицами, а затем вводит «зарегистрированный» в 4-й столбец в CSV 1, где естьматч.Как это:

<table id="t03">
  <tr>
    <th>Firstname</th>
    <th>Lastname</th> 
    <th>Email</th>
    <th>Status</th>
  </tr>
  <tr>
    <td>Eve</td>
    <td>Jackson</td> 
    <td>evejackson@yahoo.co.uk</td>
    
  </tr>
    <tr>
    <td>Jon</td>
    <td>Smith</td> 
    <td>johnsmith@gmail.com</td>
    <td> Registered</td>
  </tr>
</table>

Если совпадений нет, тогда код должен сравнивать имя и фамилию между двумя таблицами и вводить «зарегистрированный», если есть совпадение.Я понятия не имею, как это сделать в R, хотя это может быть довольно просто.Спасибо.

1 Ответ

0 голосов
/ 03 октября 2018

Помимо опции merge, предложенной @akrun, вы также можете использовать операторы ifelse().Вот пример:

df1 <- data.frame(Firstname = c("Eve", "Jon", "Steve"), 
                  Lastname = c("Jackson", "Smith", "Jackson"),
                  Email = c("evejackson@yahoo.co.uk", "johnsmith@gmail.com",
                            "stevejackson@yahoo.com"),
                  stringsAsFactors = FALSE)
# df1
      Firstname Lastname                  Email
1       Eve  Jackson evejackson@yahoo.co.uk
2       Jon    Smith    johnsmith@gmail.com
3     Steve  Jackson stevejackson@yahoo.com

df2 <- data.frame(Firstname = c("Jon", "Samantha", "Steve"), 
                  Lastname = c('Smith', "Andrew", "Jackson"),
                  Email = c("johnsmith@gmail.com", "samanthaandrew@yahoo.co.uk",
                            "stevejackson@yahoo.co.uk"),
                  stringsAsFactors = FALSE)
# df2
  Firstname Lastname                      Email
1       Jon    Smith        johnsmith@gmail.com
2  Samantha   Andrew samanthaandrew@yahoo.co.uk
3     Steve  Jackson   stevejackson@yahoo.co.uk

# check if Emails in df1 are also in df2 and then if Firstname and Lastname are the
# same in df1 and df2 
df1$Status <- ifelse(df1$Email %in% df2$Email, "Registered",
                     ifelse(df1$Firstname == df2$Firstname &
                                    df1$Lastname == df2$Lastname, "Registered",
                            ""))
df1 # output
  Firstname Lastname                  Email     Status
1       Eve  Jackson evejackson@yahoo.co.uk           
2       Jon    Smith    johnsmith@gmail.com Registered
3     Steve  Jackson stevejackson@yahoo.com Registered
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...