2015-07-21 5 views
3

Вот код, который я работаю с:Cbind/Rbind С IfElse Состояние

x <- c("Yes","No","No","Yes","Maybe") 
y <- t(1:10) 
z <- t(11:20) 

rbind.data.frame(ifelse(x == "Yes",y,z)) 

Это производит

X1L X12L X13L X4L X15L 
1 1 12 13 4 15 

Желаемый результат:

x 
1 Yes 1 2 3 4 5 6 7 8 9 10 
2 No 11 12 13 14 15 16 17 18 19 20 
3 No 11 12 13 14 15 16 17 18 19 20 
4 Yes 1 2 3 4 5 6 7 8 9 10 
5 Maybe 11 12 13 14 15 16 17 18 19 20 

Я думал что я могу использовать оператор ifelse с функцией rbind.data.frame() или cbind.data.frame(). Итак, если x == "Yes", то это будет объединено с вектором «y». Как показано в первой строке желаемого выхода. И наоборот, если x!="Yes", то он будет сочетаться с вектором «z». Как я буду заниматься этим. Я также подумал, что возможно индексирование с помощью функции() может быть возможным, но я не мог думать о том, как я буду использовать ее.

ОБНОВЛЕНИЕ ЕЩЕ ВОПРОС

Вот код, я работаю с:

a <- c(1,0,1,0,0,0,0) 
    b <- 1:7 

    t(sapply(a, function(test) if(test==0) b else 0)) 

Which produces 

     [,1] [,2]  [,3] [,4]  [,5]  [,6]  [,7]  
    [1,] 0 Integer,7 0 Integer,7 Integer,7 Integer,7 Integer,7 

из вас может объяснить это? Код ниже работает, но мне было интересно, почему функция sapply не работает. Также как сохранить матрицу, созданную ниже?

`row.names<-`(t(t(rbind(b,0))[,(a!='1')+1L]),x) 

Ответ на мой последний вопрос

Для sapply функции для работы ей нужен вход в операторе еще, чтобы быть вектором так,

 a <- c(1,0,1,0,0,0,0) 
     b <- 1:7 
     c <- rep(0, times = length(a)) 
     t(sapply(a, function(test) if(test==0) b else c)) 

Теперь это производит правильный выход.

ответ

5

Попробуйте

t(sapply(x, function(x) if(x=='Yes') y else z)) 

Или

`row.names<-`(t(t(rbind(y,z))[,(x!='Yes')+1L]),x) 
+1

кратким, работает отлично. Спасибо, вы согласитесь, когда stackoverflow позволяет это –

Смежные вопросы