当前位置:  开发笔记 > 编程语言 > 正文

在R中的行中交换值

如何解决《在R中的行中交换值》经验,为你挑选了1个好方法。



1> etienne..:

我们可以使用pminpmax执行该任务.它们将返回行数长度的向量,一个具有第二列和第三列之间的最小值,一个具有最大值.然后我们用新值替换原来的2列:

df[,2:3]<-cbind(pmin(df[,2],df[,3]),pmax(df[,2],df[,3]))

df
#   V1        V2        V3
# 1  3 112634042 113634042
# 2 15  42130650  43130646
# 3  5  59947488  60947483
# 4 47  65968160  66968149
# 5 16  29674823  30674811
# 6  5   9441835  10441822

数据:

df <- structure(list(V1 = c(3L, 15L, 5L, 47L, 16L, 5L), V2 = c(113634042L, 
42130650L, 59947488L, 65968160L, 30674811L, 10441822L), V3 = c(112634042L, 
43130646L, 60947483L, 66968149L, 29674823L, 9441835L)), .Names = c("V1", 
"V2", "V3"), class = "data.frame", row.names = c(NA, -6L))

另一种选择是使用applysort:

t(apply(df[,2:3],1,sort))
#           [,1]      [,2]
# [1,] 112634042 113634042
# [2,]  42130650  43130646
# [3,]  59947488  60947483
# [4,]  65968160  66968149
# [5,]  29674823  30674811
# [6,]   9441835  10441822

apply版本似乎是慢pminpmax:

Unit: microseconds
  expr     min      lq      mean   median       uq      max neval cld
  pmax  54.202  57.089  68.17331  68.4750  72.0025  167.738   100  a 
 apply 561.263 581.950 624.66715 598.4675 630.5395 1179.936   100   b

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有