gpt4 book ai didi

r - 在多个变量的逻辑条件下使用变异创建新变量 - 变异?

转载 作者:行者123 更新时间:2023-12-04 17:01:43 27 4
gpt4 key购买 nike

mutate 能否根据跨变量应用的逻辑条件创建新变量?
更具体地说,请考虑以下数据。

set.seed(1234)
val <- c(rep(0, 20), 1)
a <- sample(val, 50, replace=T)
b <- sample(val, 50, replace=T)
c <- sample(val, 50, replace=T)
d <- sample(val, 50, replace=T)
dat <- data.frame(a,b,c,d)

这是一些伪代码,可以实现我想做的事情,但基本上删除了所有逻辑比较(因为我有很多事情要做)。显然这不是功能代码。

new.dat <- mutate(dat, anyABCD == ifelse(A or B or C or D == 1, 1, 0))

是否有更有效的程序来处理此任务以避免出现很长的 ifelse 条件语句?我发现了一个类似的问题here但我想应用一个单一的逻辑比较,而不是把每一个都写出来。我不知道如何使用 data.table 使后续代码工作。任何帮助将不胜感激!

最佳答案

一如既往,最佳答案将取决于具体问题。

在这种情况下,例如,您可以使用pmax():

dat$anyABCD <-  with(dat, pmax(a, b, c, d) == 1)

head(dat)
a b c d anyABCD
1 0 0 0 0 FALSE
2 0 0 0 0 FALSE
3 0 0 0 0 FALSE
4 0 0 0 0 FALSE
5 0 0 0 0 FALSE
6 0 0 0 1 TRUE

您还可以使用apply 函数,例如:

dat$anyABCD <- apply(dat[, 1:4], 1, function(x)max(x) == 1)
head(dat)

a b c d anyABCD
1 0 0 0 0 FALSE
2 0 0 0 0 FALSE
3 0 0 0 0 FALSE
4 0 0 0 0 FALSE
5 0 0 0 0 FALSE
6 0 0 0 1 TRUE

而且,如果您非常确定您的数据是二进制的,您可以使用 rowSums():

dat$anyABCD <- rowSums(dat[, 1:4] >= 1)

head(dat)
a b c d anyABCD
1 0 0 0 0 0
2 0 0 0 0 0
3 0 0 0 0 0
4 0 0 0 0 0
5 0 0 0 0 0
6 0 0 0 1 1

关于r - 在多个变量的逻辑条件下使用变异创建新变量 - 变异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27062432/

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