应用使用多列作为输入的函数

sapply with function using multiple columns as input

我有一个数据框,假设有 2 列和 4 行(它更大……我只是让它更简单),如下所示: 值:0.2、0.3、0.5、0.8 R: 1, 0, 1, 0

我正在尝试编写一个应用程序行,当 R 为 0 时给定 R returns 值,当 R 为 1 时给定 NA。 我会写这样的东西:

sapply(dataframe[[R]], function(x) ifelse(x==1,NA,dataframe[[Value]][[indexOf(x)]]))

有没有类似我的"indexOf"(虚函数)的函数可以使用?

这个任务使用 for 循环会很容易,但我想用 sapply 高效地完成它。

ifelse 就是您要找的。

> df = data.frame(Value=c(0.2, 0.3, 0.5, 0.8),
                  R=c(1, 0, 1, 0))

> df$New = ifelse(df$R==1, df$Value, NA)

> df
  Value R New
1   0.2 1 0.2
2   0.3 0  NA
3   0.5 1 0.5
4   0.8 0 NA 

您不需要 sapplyifelse 来完成此任务。您可以使用数学运算符。

dat <- data.frame(Value = c(0.2, 0.3, 0.5, 0.8),
                  R = c(1, 0, 1, 0))

transform(dat, NewCol = Value * NA ^ R)
#   Value R NewCol
# 1   0.2 1     NA
# 2   0.3 0    0.3
# 3   0.5 1     NA
# 4   0.8 0    0.8