gpt4 book ai didi

使用向下应用行时的 R 引用列

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

如果我有一些可以建模的数据:

c1 <- c("A","B","C","A")
c2 <- c("a", "a", "b", "c")
c3 <- c(0, 1, 0, 0)
c4 <- c(0, 0, 0, 1)
c5 <- c(1, 0, 0, 0)

df <- data.frame(c1 = c1, c2 = c2, c3 = c3, c4 = c4, c5 = c5)

我想要一个数组 array.filled,如果 0c2<,则从 c1 填充第 3:5 列 如果 1

我正在考虑使用 applyifelse 来执行此操作,但不知道如何使用 apply(df, 2, function(x) , ifelse(x == 0, ?, x))(在这种情况下我会这样做两次)。

最佳答案

关于ifelse()

ifelse 的基本用法如下:

ifelse(c3 == 0, c1, c2)  ## ifelse(condition, if(TRUE), if(FALSE))

如果 c3 == 0 它需要 c1;否则需要 c2。您还可以查看 ?ifelse 了解更多信息。

使用apply()

要将其应用于 df[, 3:5],请执行以下操作:

foo <- function(x, opt0, opt1) ifelse(x == 0, opt0, opt1)
array.filled <- apply(df[, 3:5], 2, foo, opt0 = df[, 1], opt1 = df[, 2])

# c3 c4 c5
#[1,] "A" "A" "a"
#[2,] "a" "B" "B"
#[3,] "C" "C" "C"
#[4,] "A" "c" "A"

使用sapply()

另一种/更好的方法是使用sapply:

# still using the `foo` defined above
array.filled <- sapply(df[3:5], foo, opt0 = df$c1, opt1 = df$c2)

# c3 c4 c5
#[1,] "A" "A" "a"
#[2,] "a" "B" "B"
#[3,] "C" "C" "C"
#[4,] "A" "c" "A"

关于使用向下应用行时的 R 引用列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37601633/

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