如何选择满足特定条件的R数据帧中的第一行?

时间:2011-11-16 01:49:54

标签: r select dataframe

如何选择符合特定条件的R数据帧的第一行?

以下是上下文:

我有一个包含五列的数据框:

"pixel", "year","propvar", "component", "cumsum." 

pixelyear有1,225种组合,因为数据是根据25个研究年度中每一年的49个地理像素的年度时间序列计算得出的。在每个像素年内,我计算了propvar,即由给定像素年的时间序列的快速傅里叶变换的给定分量解释的总方差的比例。然后我计算cumsum,它是像素年内每个频率成分的propvar的累积和。 component列只是为您提供了计算propvar的傅里叶级数组件(加1)的索引。

我想确定解释超过99%方差所需的组件数量。我认为一种方法是在cumsum>的每个像素年内找到第一行。 0.99,并使用三列pixelyearnumbercomps从中创建数据框,其中numbercomps是给定像素年内所需的组件数解释超过99%的方差。我不知道如何在R中做到这一点。有没有人有解决方案?

2 个答案:

答案 0 :(得分:19)

不确定。这样的事情可以解决问题:

# CREATE A REPRODUCIBLE EXAMPLE!
df <- data.frame(year = c("2001", "2003", "2001", "2003", "2003"),
                 pixel = c("a", "b", "a", "b", "a"), 
                 cumsum = c(99, 99, 98, 99, 99),
                 numbercomps=1:5)
df
#   year pixel cumsum numbercomps
# 1 2001     a     99           1
# 2 2003     b     99           2 
# 3 2001     a     98           3
# 4 2003     b     99           4
# 5 2003     a     99           5

# EXTRACT THE SUBSET YOU'D LIKE.
res <- subset(df, cumsum>=99)
res <- subset(res, 
              subset = !duplicated(res[c("year", "pixel")]),
              select = c("pixel", "year", "numbercomps"))
#   pixel year numbercomps
# 1     a 2001           1
# 2     b 2003           2
# 5     a 2003           5

编辑此外,对于那些对data.table感兴趣的人,还有以下内容:

library(data.table)
dt <- data.table(df, key="pixel, year")    
dt[cumsum>=99, .SD[1], by=key(dt)]

答案 1 :(得分:0)

让我们假设 df 是我们必须从中选择符合条件的第一行的数据集。 此两行代码将为您提供所需的行。

row_index <- which(<criteria>, arr.ind = TRUE)[1]

df_required <- df[row_index,]