gpt4 book ai didi

R if语句具有多个条件和多个结果

转载 作者:行者123 更新时间:2023-12-02 16:18:06 24 4
gpt4 key购买 nike

我想知道是否存在以下函数。我有一个数据框如下

test <- data.frame(replicate(2,sample(0:100,1000,rep=TRUE)))
cutoff.X1 <- 20
cutoff.X2 <- 60
test
X1 X2
1 63 79
2 68 76
3 23 67
4 21 48
5 78 84
6 35 47
7 34 20
8 24 36
9 32 41
10 92 90
11 77 20
12 21 54
13 90 81
14 69 43
15 70 30
16 56 31
17 1 74
18 100 71
19 72 36
20 88 55

我想要的是添加一个列,说明 X1、X2、无或两者,具体取决于 X1 中的行是否高于 cutoff.X1,X2 的值是否高于 cutoff。 X2,两者都不是,或者都高于截止值。我会知道如何使用多个 If 语句来做到这一点,但由于真正的代码是大量数据,我想知道是否有一种方法可以不处理不必要的数据。

最佳答案

这是一种使用一些数学和逻辑向量的简单方法。这利用了 + TRUE 计算结果为 1 的事实。

首先,用选项创建一个字符向量。然后测试 X1 是否大于截止值。当 TRUE 时,这将等于 1。然后测试 X2 是否大于截止值并乘以 2。然后,将这两个数字相加并加上 1。当两者都不是时,总数将等于 1,当 X1 更大时,总数将等于 2,当 X2 更大时,总数将等于 3,而 4当两者都是。

最后,使用您刚刚创建的整数向量对您的字符向量进行子集化。

test$above <- c("neither","X1","X2","both")[((test$X1 > cutoff.X1) + ((test$X2 > cutoff.X2) * 2)) + 1]
head(test,10)
X1 X2 above
1 64 51 X1
2 39 31 X1
3 24 14 X1
4 74 57 X1
5 67 91 both
6 7 6 neither
7 14 78 X2
8 74 92 both
9 18 93 X2
10 27 31 X1

如果你不喜欢那样,总有 dplyr::case_when,这无疑更容易阅读:

library(dplyr)
test$above <- case_when(test$X1 > cutoff.X1 & test$X2 > cutoff.X2 ~ "both",
test$X1 > cutoff.X1 ~ "X1",
test$X2 > cutoff.X2 ~ "X2",
TRUE ~ "neither")

请记住,case_when 会计算每个条件,直到一个条件的计算结果为 TRUE,因此请务必将“两者”条件放在首位。

关于R if语句具有多个条件和多个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66138893/

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