2017-04-02 6 views
1

R에 새로 워서 기초 및 어리석은 질문이 있습니다. 저의 모든 경험 많은 석사 과정에서 배울 수 있기를 바랍니다. 다른 모든 데이터 전문가에게도 도움이 될 수있는 사람이 되길 바랍니다.적용 기능 내에서 % in %를 사용하는 올바른 방법

id이 같은 행에 id_lag에있는 경우 내 목표는 test의 각 행을 확인하는 것입니다. 그것은이 행 여부에 나열된 경우

test <- as.data.frame(matrix(NA,10,3)) 
names(test) <- c("Year","id","id_lag") 
test[,1] <- c(2011,2012,2013,2010,2014,2015,2016,2010,2011,2012) 
test[,2] <- c(76,560,342,7908,200,23,23,890,780,150) 
test[,3] <- c("76,89","209,2000,400","342,333,234","908,888","","23","8097,5678","12","780,209","150,4504") 

involved <- function(id,id_lag) 
{ 
a <- return(id %in% scan(what = "", sep = ",",text = id_lag)) 
return(a) 
} 



check <- apply(test, 1, function(x,y) involved(test$id,test$id_lag)) 

내가 1 TRUE 등의 목록 (10)에 의해 또는 FALSE을 기대하고있어 다음과 같이 내 샘플 코드입니다. 그러나, 나는 전체 목록을 10 번 스캔 한 TRUE 또는 FALSE으로 10 x 10 매트릭스를 얻고 있습니다. 이 적용 함수를 제거 할 수있는 방법은 전체 목록을 전체 스캔하는 대신 라인을 통해서만 스캔 할 수 있습니까? 아니면 작동하는 data.tables 등 어떤 더 나은 접근법이 있습니까?

감사

답변

1

apply(X, MARGIN, FUN, ...)MARGIN = 2MARGIN = 1 경우 만약 열에 걸쳐 행렬의 행에 걸쳐 기능을 적용한다.

당신이

check <- apply(test, 1, function(x,y) involved(test$id,test$id_lag)) 

입니다 함께 할 것을 "는 text 행렬의 각 행에 대해 기능 involved(test$id,test$id_lag)를 호출". 따라서 test의 10 개 행 각각에 대해 involved(test$id,test$id_lag)을 한 번 호출했기 때문에 10x10 행렬로 끝납니다.

각 함수 호출에 대한 인수로 여러 열의 요소를 사용하면서 한 행에 걸쳐 함수를 적용하려면 mapply()이 유용한 함수입니다. 아마도 다음과 같을 것입니다 :

mapply(function(x,y) involved(x,y), x = test$id, y = test$id_lag) 
+0

적용 기능 제품군에 대해 더 많이 살펴 보겠습니다. 감사! – Anne