【发布时间】:2020-08-06 20:13:19
【问题描述】:
这是 R 中的行选择问题。
我想根据变量 15 的最小值在每个数据集中只获取一行。我在下面尝试了两种方法,它们都没有返回所需的输出。
对于列表 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 |
| . | . | . | . |
| . | . | . | . |
+----------------------------------+---------+------------------------+----------------+
第一种方法是聚合和合并。由于必须对列表执行此操作,因此代码处于循环中:
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 的其他答案,但可能由于列表的设置方式,这不起作用?
我希望你能告诉我我哪里弄错了。
【问题讨论】:
-
您能澄清一下这里的最小值的含义吗?可能很小,例如
-
十五是两个日期的差值。它始终是一个正整数。因此,我希望找到“十五”最接近 0 的行。