我的df看起来像这样:
> df2
name value
1 a 0.20019421
2 b 0.17996454
3 c 0.14257010
4 d 0.14257010
5 e 0.11258865
6 f 0.07228970
7 g 0.05673759
8 h 0.05319149
9 i 0.03989362
我想使用列value
的总和对其进行子集化,即,我想提取那些列value
的值之和高于0.6的行,但是开始求和值从第一行开始。我想要的输出是:
> df2
name value
1 a 0.20019421
2 b 0.17996454
3 c 0.14257010
4 d 0.14257010
我尝试了df2[, colSums[,5]>=0.6]
,但很明显colSums期待array
提前致谢
答案 0 :(得分:2)
我不确定完全你想要做什么,但我认为cumsum
应该能够提供帮助。
首先让这个可以重现,让我们使用dput
,以便其他人可以提供帮助:
df <- structure(list(name = structure(1:9, .Label = c("a", "b", "c",
"d", "e", "f", "g", "h", "i"), class = "factor"), value = c(0.20019421,
0.17996454, 0.1425701, 0.1425701, 0.11258865, 0.0722897, 0.05673759,
0.05319149, 0.03989362)), .Names = c("name", "value"), class = "data.frame", row.names = c(NA,
-9L))
然后查看cumsum(df$value)
提供的内容:
cumsum(df$value)
# [1] 0.2001942 0.3801587 0.5227289 0.6652990 0.7778876 0.8501773 0.9069149 0.9601064 1.0000000
最后,相应的子集:
subset(df, cumsum(df$value) <= 0.6)
# name value
# 1 a 0.2001942
# 2 b 0.1799645
# 3 c 0.1425701
subset(df, cumsum(df$value) >= 0.6)
# name value
# 4 d 0.14257010
# 5 e 0.11258865
# 6 f 0.07228970
# 7 g 0.05673759
# 8 h 0.05319149
# 9 i 0.03989362
答案 1 :(得分:1)
这是一种方法:
df2[seq(which(cumsum(df2$value) >= 0.6)[1]), ]
结果:
name value
1 a 0.2001942
2 b 0.1799645
3 c 0.1425701
4 d 0.1425701