2016-12-26 103 views
0

我有两个具有共享因子级别(“Auction_ID”)的数据帧(df,df5)。 so df有num.bidders和res.bid和Auction_ID。 df5,有bid.points,Auction_ID。lapply()和spline()在R中的两个数据帧中,不合并

我用smooth.splines()函数来获得的样条估计,和我保存它作为DF新列(我不知道我是否应该将其保存在DF5)

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

的问题是如何对每个级别的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)} 
    ) 

我不知道如果我介绍一个列表变量,这能否帮助?

如果我使用合并(DF,DF5,通过= “Auction_ID”),那么我结束了非常大的数据帧:

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: 

(合并()的 “所有” 选项已经尝试等。 all.y = TRUE ...给出了相同数量的OBS的,这是不利于我的目的。

+0

原始WinnersCurse.txt R代码是否完全符合您的需求,因为您的翻译看起来并不一致?例如,* AuctionID *未在原始引用。他们使用的 – Parfait

+0

:代码中的auctionid ... –

回答

0

是你不想要对付大DF与50,000列的问题?

也许合并(aka join)并不是你所需要的,也许你只需要使用“match”函数来实质上执行一个vlookup a nd将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

考虑使用Map通过两个dataframes返回从predict()返回值的列表:

列表返回

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)