Перебирайте строки функции применения фрейма данных с помощью оператора if

Я новичок в R, и я пытаюсь суммировать 2 столбца данного фрейма данных, если оба суммируемые элементы удовлетворяют заданному условию. Чтобы прояснить ситуацию, я хочу сделать следующее:

> t.d<-as.data.frame(matrix(1:9,ncol=3))
> t.d
  V1 V2 V3
  1  4  7  
  2  5  8  
  3  6  9  

> t.d$V4<-rep(0,nrow(t.d))

> for (i in 1:nrow(t.d)){
+   if (t.d$V1[i]>1 && t.d$V3[i]<9){
+     t.d$V4[i]<-t.d$V1[i]+t.d$V3[i]}
+     }

> t.d    
  V1 V2 V3 V4
  1  4  7  0
  2  5  8 10
  3  6  9  0

Мне нужен эффективный код, так как мой реальный фрейм данных содержит около 150000 строк и 200 столбцов. Это дает ошибку:

t.d$V4<-t.d$V1[t.d$V1>1]+ t.d$V3[t.d$V3>9] 

] "Применить" - это вариант? Я пробовал это:

t.d<-as.data.frame(matrix(1:9,ncol=3))
t.d$V4<-rep(0,nrow(t.d))

my.fun<-function(x,y){
  if(x>1 && y<9){
    x+y}
}

t.d$V4<-apply(X=t.d,MAR=1,FUN=my.fun,x=t.d$V1,y=t.d$V3)

, но он тоже выдает ошибку. Большое спасибо за вашу помощь.

32
задан Reinstate Monica - G. Simpson 10 April 2013 в 02:33
поделиться