gpt4 book ai didi

r - 如何在 R 中使用矢量化根据条件更改 DF 值?

转载 作者:行者123 更新时间:2023-12-05 02:29:26 26 4
gpt4 key购买 nike

假设我有以下 DF:

<表类="s-表"><头>C1C2<正文>00111100....

我现在想在 Dataframe 上应用以下条件:

  • C1 的值应为 1
  • 0 到 5 之间的随机整数应小于 2

如果这两个条件都为真,我将该行的 C1 和 C2 值更改为 2

我知道这可以通过使用 apply 函数来完成,我使用了以下内容:

C1 <- c(0, 1,1,0,1,0,1,0,1,0,1)
C2 <- c(0, 1,1,0,1,0,1,0,1,0,1)

df <- data.frame(C1, C2)

fun <- function(x){
if (sample(0:5, 1) < 2){
x[1:2] <- 2
}
return (x)
}

index <- df$C1 ==1 // First Condition
processed_Df <-t(apply(df[index,],1,fun)) // Applies Second Condition
df[index,] <- processed_Df

输出:

<表类="s-表"><头>C1C2<正文>00 2 21100....

Some Rows have both conditions met, some doesn't (This is the mainfunctionality, I would like to achieve)

现在我想使用矢量化而不使用循环或 apply 函数来实现同样的目的。我唯一的困惑是“如果我不使用 apply,根据条件的结果,每一行不会得到相同的结果吗?(例如,以下:)

df$C1 <- ifelse(df$C1==1 & sample(0:5, 1) < 5, 2, df$C1)

This changes all the rows in my DF with C1==2 to 2 when there should possibly be many 1's.

有没有办法在不使用 apply 函数的情况下为每一行的第二个条件获得不同的结果?希望我的问题是有道理的。

谢谢

最佳答案

您需要对值采样 nrow 次。试试这个方法 -

set.seed(167814)
df[df$C1 == 1 & sample(0:5, nrow(df), replace = TRUE) < 2, ] <- 2
df

# C1 C2
#1 0 0
#2 2 2
#3 2 2
#4 0 0
#5 1 1
#6 0 0
#7 2 2
#8 0 0
#9 1 1
#10 0 0
#11 1 1

关于r - 如何在 R 中使用矢量化根据条件更改 DF 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72195105/

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