我有一个数据框,让我们说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高效地完成它。
答案 0 :(得分:0)
ifelse
正是您要找的。 p>
> 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)
此任务不需要sapply
或ifelse
。你可以使用数学运算符。
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