2015-08-26 2 views
0

У меня есть кадр данных, скажем, 2 столбца и 4 строки (это больше ... Я просто делаю это проще): Значение: 0.2, 0.3, 0.5, 0.8 R: 1, 0, 1, 0sapply с функцией с использованием нескольких столбцов в качестве входных данных

Я пытаюсь написать sapply линию, заданную величину R возвращает значение при R = 0 и NA, когда R равен 1. я хотел бы написать что-то вроде этого:

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

есть ли что-то вроде моей функции «IndexOf» (мнимая функция), что я мог использовать?

Задача будет очень простой в использовании для циклов, но я хочу сделать это эффективно с помощью sapply.

ответ

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 
+0

Фактически, я сделал противоположное тому, что вы просили, если вы хотите вставить 'NA', где' R''''1, но вы получаете эту идею. – Eoin

+0

Большое спасибо! –

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 
Смежные вопросы