r - 根据多个范围对数据框进行子集化,并将每个范围保存为列表中的元素
问题描述
我想根据属于多个范围的值将数据框制作为列表,以便每个值属于每个范围成为该列表中的一个元素。例如,如果我有 10 个范围和 nrow=n 的数据框,那么我将获得 10 个数据框的列表。
数据
df<- data.frame(x=seq(33, 37, 0.12), y=seq(31,35, 0.12))
library(data.table)
range<- data.table(start =c(36.15,36.08,36.02,35.95,35.89,35.82,35.76,35.69),
end = c(36.08,36.02,35.95,35.89,35.82,35.76,35.69,35.63))
我试过了
nlist<-list(
df[which(df$x>36.15),],
df[which(df$x<=36.15 & df$x>36.08),],
df[which(df$x<=36.08 & df$x>36.02),],
df[which(df$x<=36.02 & df$x>35.95),],
df[which(df$x<=35.95 & df$x>35.89),],
df[which(df$x<=35.89 & df$x>35.82),],
df[which(df$x<=35.82 & df$x>35.76),],
df[which(df$x<=35.76 & df$x>35.69),],
df[which(df$x<=35.69 & df$x>35.63),],
df[which(df$x <= 35.63),])
有两个问题。首先,我想循环而不是编写每个范围限制的值。其次,这段代码:
Reduce('+', lapply(nlist, nrow))
产生行的总和 = 35,而我的数据框有 nrow = 34。这个额外的值来自哪里?
解决方案
您可以应用范围对象的行
apply(range, 1, function(z) df[df$x > z[2] & df$x <= z[1],])
推荐阅读
- python - 从一组单词中找到最长圆序列的函数
- react-redux - Redux 连接的 React 组件在调用 GET api 请求之前不会更新
- python - 在 pandas df 的索引位置插入值
- javascript - 避免 rowcallback 数据表中的列
- powershell - powershell - 过滤包含列表数据的嵌套对象
- assembly - 计算段的基地址 (Intel 8086)
- arrays - 如何将整数转换为字符串并放入C中的数组
- gdb - 从在共享对象中崩溃的交叉编译的可执行文件加载核心转储
- c# - 将数组从模型传递到控制器以与控制器中的数组进行比较
- javascript - Javascript没有隐藏最后一张图片上的按钮