gpt4 book ai didi

r - 在 R 中的两个现有数据框列之间进行选择时,更快的 "IF"语句解决方法

转载 作者:行者123 更新时间:2023-12-02 09:27:30 24 4
gpt4 key购买 nike

我有以下数据集:

x <- 1000
df <- data.frame(a = sample(c("Jack", "Jill"), x, replace = TRUE),
b = sample(c("Bonnie", "Clyde"), x, replace = TRUE),
c = sample(c("blue", "green"), x, replace = TRUE))

我想创建一个名为 df$cho​​ice 的新列,当 df$c == "blue" 时,它会选择 df$a 并选择 df$ bdf$c == "green" 时。

了解传统 ififelse 语句在这种情况下的局限性,我创建了以下函数来执行所需的任务:

choice <- function(y) {
nw1 <- df[y, ]

if(nw1$c == "blue") {
nw1$choice = nw1$a
} else {
nw1$choice <- nw1$b
}

print(nw1)
}

rows <- c(1:nrow(df))
df2 <- do.call("rbind", lapply(rows, function(y) choice(y)))

当 x <- 1000 时的运行时间测试刚刚超过 2 秒,但是当 x <- 25000 膨胀时,运行的函数时间在我的机器上超过 60 秒。

在处理 >25000 行时,是否有任何建议以不同的方式来完成此任务,以减少系统时间?可能有一个不同的 apply 函数来实现这个目的,但我还没有弄清楚。

最佳答案

不需要任何函数或循环/*apply,只需将因子设置为字符,然后使用ifelse分配新列

x <- 1000
df <- data.frame(a = sample(c("Jack", "Jill"), x, replace = TRUE),
b = sample(c("Bonnie", "Clyde"), x, replace = TRUE),
c = sample(c("blue", "green"), x, replace = TRUE), stringsAsFactors = F)


df$choice <- ifelse(df$c == "blue", df$a, df$b)

head(df)
a b c choice
1 Jack Bonnie blue Jack
2 Jill Bonnie blue Jill
3 Jack Clyde green Clyde
4 Jack Bonnie green Bonnie
5 Jill Bonnie green Bonnie
6 Jill Bonnie blue Jill

关于r - 在 R 中的两个现有数据框列之间进行选择时,更快的 "IF"语句解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36610968/

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