2016-12-26 7 views
0

공유 요소 레벨 ("Auction_ID")을 갖는 두 개의 데이터 프레임 (df, df5)이 있습니다. df에는 num.bidders 및 res.bid와 Auction_ID가 있습니다. df5에 bid.points, Auction_ID이 있습니다.R의 두 데이터 프레임에 lapply() 및 spline()이 적용됩니다.

spline <- smooth.spline(df$c_bidders,df$res.bid) 

문제는 방법이다 (내가 df5에 저장하는 경우는 잘 모르겠습니다)

나는 스플라인 추정치를 얻을 수 smooth.splines() 함수를 사용하고, 나는 안양에 새 열로 저장 각 수준에 대해 df $ spline1 및 df5 $ bid.points에 대해 predict() 함수를 사용합니다. 나는 lapply를 사용하여 df, df5를 함수의 입력 데이터로 보내려고했으나 할 수없는 것 같습니다. 좋아 :

lapply(df,df5, function(t,t1) 
    { 
    tt<-predict(t$spline,t1$bid.points,deriv=0)$y 
    return(tt)} 
    ) 

내가 목록 변수를 도입하면 잘 모릅니다이 도움이됩니까?

그때 나는 내가 매우 큰 데이터 프레임까지 종료하고 (= "Auction_ID"에 의해 DF, df5) 병합을 사용하는 경우 :

str(df1): 
    Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 3967 obs. of 17 variables: 

    str(df5) 
    'data.frame': 18338 obs. of 2 variables: 

    x <- merge(df5, df1, by = "Auction_ID") 
    str(x) 
    'data.frame': 501367 obs. of 19 variables: 

((병합) "모든"옵션은 이미 같은 시도됩니다에 있습니다. TRUE all.y =이 ... OBS 같은 수 있습니다. 내 목적을 위해 좋지 않다있다.

+0

원본 WinnersCurse.txt R 코드가 번역이 올바르게 정렬되지 않은 것처럼 정확히 필요한 작업을 수행합니까? 예를 들어 * AuctionID *는 원본에서 참조되지 않습니다. – Parfait

+0

그들은 다음과 같이 사용했습니다 : 코드에서 auctionid ... –

답변

0

는 50,000 행 df라고 큰 처리하지 않으려는 문제인가?

어쩌면 병합 (일명 조인)이 필요한 것이 아닙니다. "match"함수를 사용하여 기본적으로 vlookup을 수행하면됩니다. df $ spline1의 각 값을 df5 $ bid.points의 각 해당 값 (경매 ID 기준)과 일치시킵니다. 이 당신을 위해 작동하는 경우

참조 :

# assuming df5 is the target df: 
df5$spline1 <- df$spline1[match(df$Auction_ID,df5$Auction_ID)] 

## OR 

# assuming df is the target df: 
df$bid.points <- df5$bid.points[match(df$Auction_ID,df5$Auction_ID)] 
0

predict()에서 반환 된 값의 목록을 반환 모두 dataframes 통과 Map 사용을 고려 :

목록 반환

Map(function(t, t1) predict(t$spline, t1$bid.points,deriv=0)$y, df, df5) 

위는 세 번째 인수로 두 번째 데이터 프레임을 전달하는 것과 같습니다. lapply() :

lapply(df, function(t,t1) { 
    predict(t$spline, t1$bid.points, deriv=0)$y 
}, df5) 

행렬 행렬을 반환 sapply()를 사용하여, 대안

귀국 :

sapply(df, function(t,t1) { 
    predict(t$spline, t1$bid.points, deriv=0)$y 
}, df5) 

또는 mapply()Map() 뒤에 기본 기능 (그 이외의 간략화 랩퍼)

mapply(function(t,t1) predict(t$spline, t1$bid.points, deriv=0)$y, df, df5)