2017-01-23 11 views
0

У меня есть вход ниже, и я бы хотел вычесть два столбца, но я хочу вычесть всегда самое низкое значение из самого высокого значения. Потому что я не хочу отрицательных значений в результате, а иногда самое высокое значение находится в первом столбце (PaternalOrgin) и других случаях во втором столбце (MaternalOrigin).вычитает больший столбец из меньших столбцов в фрейме данных в R

Вход:

df <- PaternalOrigin MaternalOrigin 
16    20 
3    6 
11    0 
1    3 
1    4 
3    11 

и dput выход заключается в следующем:

df <- structure(list(PaternalOrigin = c(16, 3, 11, 1, 1, 3), MaternalOrigin = c(20, 6, 0, 3, 4, 11)), colnames = c("PaternalOrigin", "MaternalOrigin"), row.names= c(NA, -6L), class="data.frame") 

Таким образом, мой ожидаемый результат будет выглядеть так:

df2 <- PaternalOrigin MaternalOrigin Results 
16    20  4 
3    6  3 
11    0  11 
1    3  2 
1    4  3 
3    11  8 

Пожалуйста, может кто-нибудь мне посоветовать? Спасибо.

ответ

0

Мы можем обернуть abs

transform(df, Results = abs(PaternalOrigin - MaternalOrigin)) 
#  PaternalOrigin MaternalOrigin Results 
#1    16    20  4 
#2    3    6  3 
#3    11    0  11 
#4    1    3  2 
#5    1    4  3 
#6    3    11  8 

Или мы можем назначить его 'Результаты'

df$Results <- with(df, abs(PaternalOrigin - MaternalOrigin)) 

Или с помощью data.table

library(data.table) 
setDT(df)[, Results := abs(PaternalOrigin - MaternalOrigin)] 

Или с dplyr

library(dplyr) 
df %>% 
    mutate(Results = abs(PaternalOrigin - MaternalOrigin)) 
+1

спасибо! Это действительно помогло мне! – Tfg1005

 Смежные вопросы

  • Нет связанных вопросов^_^