[r] if 문을 사용하여 함수를 적용하는 데이터 프레임의 행을 반복합니다.



0 Answers

ifelse 는 여기에 친구입니다.

t.d$V4<-ifelse((t.d$V1>1)&(t.d$V3<9), t.d$V1+ t.d$V3, 0)
Question

저는 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)

하지만 오류도 발생합니다. 도와 주셔서 대단히 감사합니다.



Related