gpt4 book ai didi

r - R中的条件if语句

转载 作者:行者123 更新时间:2023-12-02 07:23:20 24 4
gpt4 key购买 nike

我想知道如何根据其他列的值填充 data.frame 或 data.table 中的列。

例如:

data.table(a = c(1:5), b = c(5:1), c = rep("",5))
a b c
1 5
2 4
3 3
4 2
5 1

我想将 c 填充到:

  • 如果“a”大于“b”,则表示“更多”
  • 如果“a”小于“b”则“小于”
  • “相等则相等

如下:

a b c
1 5 "Less"
2 4 "Less"
3 3 "Equal"
4 2 "More"
5 1 "More"

我知道这可以通过带有多个 if 语句的 for 循环来完成,但我有一个非常大的数据集,我想使用“Apply”系列函数来完成。

如有任何帮助,我们将不胜感激。

最佳答案

根据我的测试,这是一个非常高效的方法,而且并不过分复杂:

dt1[, c := c("less","equal","more")[max.col(setDT(.(a < b, a==b, a > b)))] ]

另一个使用 interaction 的选项,它在简化代码方面已经尽我所能了:

dt1[, c := c("equal","less","more")[interaction(a < b, a > b)] ]

# a b c
#1: 1 5 less
#2: 2 4 less
#3: 3 3 equal
#4: 4 2 more
#5: 5 1 more

这是可行的,因为 interaction 将为两个比较返回四种可能性:

  1. FALSE.FALSE = 既不TRUE,在本例中表示既不大于也不小于,因此等于

  2. TRUE.FALSE = 第一个TRUE,因此更少

  3. FALSE.TRUE = 第二个TRUE,因此更多
  4. TRUE.TRUE = 两者都 TRUE,理论上不可能,除了低于容错度的边缘情况。

关于r - R中的条件if语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37247191/

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