Разница между 2 колоннами - PullRequest
0 голосов
/ 23 марта 2020

Нужна ваша помощь в получении желаемой разницы между двумя столбцами в моем наборе данных. Пример моего набора данных приведен ниже для справки:

User    COL-A   COL-B   Difference
10050   1360    1330    30
10051   1160    1150    10
10052   1150    
10053   1175    1170    5
10054   1175        
10055   1175        
10056   1175    1170    5
10057   1175    1170    5
10058   1170    
10059   1040    1030    10
10060   1060    
10061   1080    1060    20
10062   1100    
10063   1130    1100    30
10064   1130    1100    30
10065   1100    
10066   1130    1100    30
10067   1130    1100    30
10068   1100    
10069   1130    1100    30
10070   1130    1100    30
10071   1130        
10072   1130    1100    30
10073   1130        
10074   1130    1100    30
10075   1130    1100    30
10076   1130    1100    30
10077   1130    1100    30
10078   1130    1100    30
10079   1130    

В моем наборе данных есть два основных столбца Col-A и Col-B, и я хочу, чтобы разница отображалась в третьих столбцах. но при попытке использовать следующий код:

MOP_NEW$Difference <- MOP_NEW$COl-A - MOP_NEW$Col-B

Этот код также учитывает пустые значения столбца A и B соответственно при выдаче вывода для столбца Difference. Мое намерение состоит в том, чтобы выполнять вычитание только в том случае, если в Col-A и Col-B соответственно есть значения, и возвращать пустое (NULL) значение в случае, если для Col-A или Col-B.

нет значения.

Надеюсь, я смогу объяснить мою проблему простыми словами.

Заранее спасибо.

Абхишек

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

Вот базовый способ R. Он проверяет каждую строку как минимум на один не NA. Если одно и только одно значение равно NA, ему присваивается ноль. Затем вычисляется разница COL_A - COL_B.

MOP_NEW$Difference <- apply(MOP_NEW[2:3], 1, function(x){
  na <- is.na(x)
  if(all(na)){
    NA
  }else{
    x[na] <- 0
    x[1] - x[2]
  }
})
MOP_NEW

Данные.

MOP_NEW <- read.table(text = "
User    COL_A   COL_B   Difference
10050   1360    1330    30
10051   1160    1150    10
10052   1150    
10053   1175    1170    5
10054   1175        
10055   1175        
10056   1175    1170    5
10057   1175    1170    5
10058   1170    
10059   1040    1030    10
10060   1060    
10061   1080    1060    20
10062   1100    
10063   1130    1100    30
10064   1130    1100    30
10065   1100    
10066   1130    1100    30
10067   1130    1100    30
10068   1100    
10069   1130    1100    30
10070   1130    1100    30
10071   1130        
10072   1130    1100    30
10073   1130        
10074   1130    1100    30
10075   1130    1100    30
10076   1130    1100    30
10077   1130    1100    30
10078   1130    1100    30
10079   1130    
", header = TRUE, fill = TRUE)
0 голосов
/ 23 марта 2020

Предположим, у вас есть фрейм данных

df <- data.frame(COL_A = c(10050,1360, 1330, 30, 10051, 1160, 1150, 10, 10052, 1150,
                           10053, 1175, 1170, 5, 10054, 1175),
                 COL_B = c(10052,1364, 1335, 10, 10021, 1130, 1110, 50, 10012, 1110,
                           10043, 1125, 1130, 2, 10034, 1145))

df$difference <- df$COL_A - df$COL_B

Вывод:

  COL_A COL_B   difference
1  10050 10052        -2
2   1360  1364        -4
3   1330  1335        -5
4     30    10        20
5  10051 10021        30
6   1160  1130        30
7   1150  1110        40
8     10    50       -40
9  10052 10012        40
10  1150  1110        40
11 10053 10043        10
12  1175  1125        50
13  1170  1130        40
14     5     2         3
15 10054 10034        20
16  1175  1145        30
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...