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)