r - R中数据框行中的子集
问题描述
我有一个包含 30 行和 4 列(即x, y, z, u
)的数据框。下面给出。
mydata = data.frame(x = rnorm(30,4), y = rnorm(30,2,1), z = rnorm(30,3,1), u = rnorm(30,5))
此外,我有一个序列值,它代表我的数据框中的行号。
myseq = c(seq(1, 30, by = 5))
myseq
[1] 1 6 11 16 21 26
现在,我想计算prob
99 行的每个段的值。
filt= subset(mydata[1:6,], mydata[1:6,]$x < mydata[1:6,]$y & mydata[1:6,]$z < mydata[1:6,]$u
filt
prob = length(filt$x)/30
prob
然后我需要计算上面prob
的1:6
,..,27:30
等等。在这里,我只有 6 个prob
值。所以,我可以一一做。如果我有 100 个值,那将是乏味的。有什么方法可以计算这些prob
值吗?
先感谢您。
解决方案
顺便说一句:在subset(DF[1:99,], ...)
,DF[1:99,]
在第一个参数中使用,而不是再次,ala
subset(DF[1:99,], cumsuml < inchivaluel & cumsumr < inchivaluer)
想想如何在list
.
第一步是将数据分解为
va
起点。我将从索引列表开始,将其分解为:inds <- mapply(seq, va, c(va[-1], nrow(DF)), SIMPLIFY=FALSE)
现在这是一个序列列表,以
1:99
、 then100:198
等开头。请参阅str(inds)
以验证。现在我们可以根据每个元素的索引向量对一部分数据进行子集化:
filts <- lapply(inds, function(ind) subset(DF[ind,], cumsuml < inchivaluel & cumsumr < inchivaluer))
我们现在有一个向量列表,让我们总结一下:
results <- sapply(filts, function(filt) length(filt$cumsuml)/length(alpha))
底线,它有助于考虑如何将这个问题分解成列表,例如http://stackoverflow.com/a/24376207/3358272。
顺便说一句:我们可以在第一步中分解数据,而不是最初制作索引列表,ala
DF2 <- mapply(function(a,b) DF[a:b,], va, c(va[-1], nrow(DF)), SIMPLIFY=FALSE)
filts <- lapply(DF2, function(x) subset(x, cumsuml < inchivaluel & cumsumr < inchivaluer))
results <- sapply(filts, function(filt) length(filt$cumsuml)/length(alpha))
推荐阅读
- javascript - AngularJS $http 不断在我的一个网址中添加斜杠
- reactjs - 在 React JS 中以状态将值数组附加到当前数组
- angular - 在 IE (Angular 5) 中打印 Blob 或 ArrayBuffer
- twilio - 如何在 twilio php 中执行拨号队列?
- c++ - 在 C++ 中读取 UTF-16 文件
- git - 错误的 .git 文件夹
- marklogic - marklogic 中的数据分析/分析工具
- javascript - 如何用字符串中的等效特殊字符替换空格?
- docker - gitlab-runner exec docker - 注入 gpg 密钥
- android - API来检测Wear watch和Android手机之间的距离?