R 数据帧和#x27;s列定义的范围内的行

R 数据帧和#x27;s列定义的范围内的行,r,R,我有一个基于整数的数据框,一列中有位置坐标,第二列中有变量。坐标范围从1-1000万,变量范围从0-950-我感兴趣的是从包含所需范围的起点和终点的单独框架中定义的范围返回变量的总和 为了简化计算,我缩短了示例: Data: a = seq(1,5) b = c(0,0,1,0,2) df1 <- data.frame(a, b) c = c(1,1,2,2,3) d = c(3,4,3,5,4) df2 <- data.frame(c,d) df1: 1, 0 2, 0 3,

我有一个基于整数的数据框,一列中有位置坐标,第二列中有变量。坐标范围从1-1000万,变量范围从0-950-我感兴趣的是从包含所需范围的起点和终点的单独框架中定义的范围返回变量的总和

为了简化计算,我缩短了示例:

Data:
a = seq(1,5)
b = c(0,0,1,0,2)
df1 <- data.frame(a, b)

c = c(1,1,2,2,3)
d = c(3,4,3,5,4)
df2 <- data.frame(c,d)

df1:
1, 0
2, 0
3, 1
4, 0
5, 2

df2:
1, 3
1, 4
2, 3
2, 5
3, 4

其中,magic将df2第1列和第2列中的开始位置和结束位置传递给行和以进行df1提取。

一种可能的解决方案是使用
mapply
。我使用了一个自定义函数,但可以编写一个内联函数作为
mapply
语句的一部分

mapply(row_sum, df2$c, df2$d)

row_sum <- function(x, y){
  sum(df1[x:y,2])
}

#Result
#[1] 1 1 1 3 1
mapply(行和,df2$c,df2$d)

行总和编辑:@Frank's data.table解决方案:简短快速

df2[, s := df1[df2, on=.(a >= c, a <= d), sum(b), by=.EACHI]$V1]

    # output
       c d s
    1: 1 3 1
    2: 1 4 1
    3: 2 3 1
    4: 2 5 3
    5: 3 4 1

df2[,s:=df1[df2,on=。(a>=c,a你能告诉我们你为这个魔术做了什么吗?另一种数据表方法:
df2[,s:=df1[df2,on=。(a>=c,a@Frank花了我一段时间阅读了里面的所有内容,这绝对是一次很棒的学习经历。感谢elgant的解决方案!非常感谢你以及Manish,总是很高兴看到事情以不同的形式运行。魔术师,你们两个!Mapply看起来对我遇到的其他一些问题非常有用。比谢谢你的意见!
a = seq(1,5)
b = c(0,0,1,0,2)
df1 <- data.frame(a, b)

c = c(1,1,2,2,3)
d = c(3,4,3,5,4)
df2 <- data.frame(c,d)
df2[, s := df1[df2, on=.(a >= c, a <= d), sum(b), by=.EACHI]$V1]

    # output
       c d s
    1: 1 3 1
    2: 1 4 1
    3: 2 3 1
    4: 2 5 3
    5: 3 4 1
library(data.table)
setDT(df1)
setDT(df2)

## magic function
get_magic <- function(x)
{
    spell <- c()

    one <- unlist(x[1])
    two <- unlist(x[2])

    a <- df1[between(a, one, two), sum(b)]
    spell <- append(spell, a)

    return(spell)

}


# applies to row
d <- apply(df2, 1, get_magic)

print(d)
# output
[1] 1 1 1 3 1