2017-01-23 53 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

相关问题