使用多列作为输入的功能

时间:2015-08-26 09:25:46

标签: r missing-data

我有一个数据框,让我们说2列4行(它更大......我只是让它变得更简单),如下所示: 值:0.2,0.3,0.5,0.8 R:1,0,1,0

我试图写一个sapply线,给出R的值当R为0时返回Value,当R为1时返回NA。 我会写类似的东西:

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

是否有类似我可以使用的“indexOf”(虚函数)函数?

使用for循环的任务非常简单,但我想用sapply高效地完成它。

2 个答案:

答案 0 :(得分:0)

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 

答案 1 :(得分:0)

此任务不需要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