2013-09-02 6 views
0

Я хочу применить функцию к каждому значению dataframe $ column1, возвращая вектор той же длины. Результат должен содержать значение из dataframe $ column2 (той же строки), если выполняется условие. В (псевдо) кодеКак использовать sapply для применения функции к vector_a [i] возвращаемое значение из vector_b [i]

function <- "If (value of dataframe$column1[i] is something) {return(dataframe$column1[i])} else {return(dataframe$column2[i])} 

output_vector <- sapply(dataframe$column1, function, dataframe$column2) 

ли sapply помнить индекс вектора при применении функции так, чтобы возвращать значение из другого вектора, но с тем же индексом?

+0

рассмотреть возможность предоставления примера набора данных и ожидаемый ответ. Это поможет мне. Хотя, возможно, вопрос достаточно ясен для других. –

+0

sapply не передает индекс вашей функции. Как указывает Мариус, это то, за что нужно. – leif

ответ

3

Это именно то, что делает ifelse():

df = data.frame(col1=1:10, col2=21:30) 
output_vector = ifelse(df$col1 > 5, df$col1, df$col2) 
+0

@CptNemo, если вы действительно хотите использовать член семейства функций 'apply', вы могли бы вставлять оператор' ifelse', как это ... ... хотя в этом случае это выглядит излишним: 'df $ col3 <- apply (df, 1, function (i) ifelse (i [1]> 5, i [1], i [2])) ' –