gpt4 book ai didi

r - 在 R 的行中交换值

转载 作者:行者123 更新时间:2023-12-04 10:09:56 25 4
gpt4 key购买 nike

当左侧值大于右侧值时,我想交换每行中的 V2 和 V3 值?所以V3的值应该越大,V2的值越小。

V1    V2           V3 
3 113634042 112634042
15 42130650 43130646
5 59947488 60947483
47 65968160 66968149
16 30674811 29674823
5 10441822 9441835

最佳答案

我们可以使用 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

关于r - 在 R 的行中交换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34089498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com