2016-12-26 5 views
0

У меня есть два кадра данных (df, df5) с общим уровнем коэффициента («Auction_ID»). поэтому df имеет num.bidders и res.bid и Auction_ID. df5, имеет цену.поинты, Auction_ID.lapply() и spline() на двух кадрах данных в R, нет слияния

Я использовал smooth.splines() функцию, чтобы получить сплайн оценки, и я сохранил его как новый столбец в ДФ (я не уверен, если я должен сохранить его в DF5)

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

вопрос заключается в том использовать функцию prec() для df $ spline1 и df5 $ bid.points для каждого уровня. Я попытался использовать 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 ... дает одинаковое количество набл., не хорошо для моей цели.

+0

Содержит ли оригинальный код WinnersCurse.txt R именно то, что вам нужно, поскольку ваш перевод не кажется выровненным? Например, * AuctionID * не упоминается в оригинале. – Parfait

+0

они использовали: auctionid в коде ... –

ответ

0

ли вопрос, который вы не хотите иметь дело с большим ДФ с 50k строк?

Возможно, слияние (aka join) - это не то, что вам нужно. Возможно, вам просто нужно использовать функцию «match», чтобы по существу выполнить vlookup a nd соответствует каждому значению df $ spline1 для каждого соответствующего значения df5 $ bid.points (на основе идентификатора аукциона).

Смотрите, если это работает для ваших целей:

# 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) 

Matrix Вернуться

Кроме того, с помощью 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) 

 Смежные вопросы

  • Нет связанных вопросов^_^