gpt4 book ai didi

r - 缩短嵌套 ifelse

转载 作者:行者123 更新时间:2023-12-01 08:23:53 25 4
gpt4 key购买 nike

如果给出以下数据表,并且我们希望将 x1 因此与 x2 到 x5 进行比较,则可以使用以下内容:

set.seed(1)
library(data.table)
TDT <- data.table(x1 = round(rnorm(100,0.75,0.3),2),
x2 = round(rnorm(100,0.75,0.3),2),
x3 = round(rnorm(100,0.75,0.3),2),
x4 = round(rnorm(100,0.75,0.3),2),
x5 = round(rnorm(100,0.75,0.3),2))

TDT[,compare := ifelse(x1 < x2,1,ifelse(x1 < x3,2,ifelse(x1 < x4,3,ifelse(x1 < x5,4,5))))]

所以如果 x1 < x2 ,然后 compare == 1 , 等等。

现在在我的示例中,我有更多的列要与 x1 进行比较。有没有办法更简洁地写这个,即没有嵌套的 ifelse?

最佳答案

这节省了一些打字的时间并且易于阅读。

TDT[, compare := dplyr::case_when(
x1 < x2 ~ 1,
x1 < x3 ~ 2,
x1 < x4 ~ 3,
x1 < x5 ~ 4,
TRUE ~ 5)]

如果您有太多列而不想按名称提及它们,那么您可以使用:
apply(TDT, 1, function (x) which(x[1] < x[2:5])[1]) 

其中 x[2:5] 应替换为相关的列集。

关于r - 缩短嵌套 ifelse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43045098/

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