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

Bra*_*ium 11 select r dataframe

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

以下是上下文:

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

"pixel", "year","propvar", "component", "cumsum." 
Run Code Online (Sandbox Code Playgroud)

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

我想确定解释超过99%的方差所需的组件数量.我想做到这一点的方法之一是找到每个像素岁,其中内第一行cumsum> 0.99,从它创建一个数据帧有三列,pixel,year,和numbercomps,其中numbercomps是一个给定的像素,一年内所需的元件数量解释超过99%的方差.我不知道如何在R中这样做.有没有人有解决方案?

Jos*_*ien 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
Run Code Online (Sandbox Code Playgroud)

编辑此外,对于那些感兴趣的人data.table,有这样的:

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

  • 哇靠.现在我知道为什么你在StackOverflow会员资格的43天内累积了2,157分.谢啦!我在我的电子邮件客户端的StackOverflow文件夹中有此响应.我会在这份协助的任何出版物中向你表示感谢.我喜欢重复的功能,BTW.这就像......正是我所需要的.(顺便说一下,这些出版物当然会产生比这个特定问题更多的工作,LOL.)祝你有个美好的夜晚. (3认同)