Это проблема выбора строки в R.
Я хочу получить только одну строку в каждом наборе данных на основе минимального значения переменной пятнадцать. Я попробовал два подхода ниже, ни один из них не возвращает желаемый результат.
Для списка 1> SPX [[1]] date.frame настроен так:
SPX1[[1]]
+----------------------------------+---------+------------------------+----------------+
| | stkPx | expirDate | fifteen |
+----------------------------------+---------+------------------------+----------------+
| 1 | 1461.62 | 2013-01-19 | 2 |
| 2 | 1461.25 | 2013-01-25 | 8 |
| 3 | 1461.35 | 2013-02-01 | 3 |
| . | . | . | . |
| . | . | . | . |
+----------------------------------+---------+------------------------+----------------+
Первый подход - агрегирование и объединение. Поскольку это должно быть сделано для списка, код в al oop:
df.agg<- list() # creates a list
for (l in 1:length(SPX1)){
df.agg[[l]]<- SPX1[[l]] %>%
aggregate(fifteen ~ ticker, data=SPX1[[l]], min) #Finding minimum value of fifteen for ticker
df.minSPX1 <- merge(df.agg[[l]], SPX1[[l]]) #Merge dataset so we only get row with min fifteen value
}
Я получаю:
Error in get(as.character(FUN), mode = "function", envir = envir) :
object 'SPX1' of mode 'function' was not found
Другой подход, однако он просто меняет все значения первый столбец к одному, не удаляя строки при объединении:
TESTER<- which.min(SPX1[[1]]$fifteen) # Finds which row has minimum value of fifteen
df.minSPX1 <- merge(TESTER, SPX1[[1]],by.x=by) #Try to merge so I only get the row with min. fifteen
Я пытался читать другие ответы на SO, но, возможно, из-за того, как списки настроены, это не будет работать?
Надеюсь, вы скажете мне, где я ошибаюсь.