r - 比较两个表的元素,平均现有元素并将 NA 保留为 R 中不存在的元素

标签 r compare average

我有两个表,第一个表 (T1) 表示数字范围,第二个表 (T2) 包括坐标和分数,这是 T1 第一列的分割。

我想计算 T2 的 score 的平均值,并根据范围插入 T1,如果相应的坐标不可用,则放入 NA。让我们说:

表 1:(T1)

    start    end    
    1000    1100
    1300    1390
    1530    1610
    1800    1905

表 2:(T2)

coordinate  score
1002         3
1004         1
1020         5
1087         4
1550         1
1559         7
1609         3
1805        2.5

结果:T1 范围内的 T2 元素的平均:ex: 1000 to 1100 (3+1+5+1)/4 并且在1300 to 1390之间没有得分code> 其中放置 NA 值等等。

start    end  mean-score  
1000    1100   3.25
1300    1390   NA
1530    1610   3.66
1800    1905   2.5

你能帮我在 R 中实现它吗?

谢谢。

最佳答案

在@akrun 的提示下,我在“data.table”中遇到了 foverlaps 函数。如果这是最好的方法,我不肯定(但它有效:-))

library(data.table)
T1 <- as.data.table(T1)
T2 <- as.data.table(T2)
setkey(T1, start, end)
T2[, c("start", "end") := coordinate]
foverlaps(T2, T1)[, list(score = mean(score)), by = list(start, end)]
#    start  end    score
# 1:  1000 1100 3.250000
# 2:  1530 1610 3.666667
# 3:  1800 1905 2.500000

更新:

正如@Arun 在评论中提到的,如果您在 T2 上也设置了 Key,并更改了 foverlaps 的顺序,您可以获得 NA 为好吧。

setkey(T2, start, end)
foverlaps(T1, T2)[, list(mean = mean(score)), by = list(i.start, i.end)]
#    i.start i.end     mean
# 1:    1000  1100 3.250000
# 2:    1300  1390       NA
# 3:    1530  1610 3.666667
# 4:    1800  1905 2.500000

关于r - 比较两个表的元素,平均现有元素并将 NA 保留为 R 中不存在的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26483384/

相关文章:

r - 在 R 中创建嵌套序列

javascript - 如何按顺序检查数组 1 中的每个值,存在于数组 2 中并将其删除?

java - 在 Java 中比较两个 Excel 文件的最简单方法?

linux - 计算第 1 列中每个不同变量的多列平均值

c++ - 我的问题 = 直到用户按下 "enter"从 C++ 中的用户输入取平均值

r - 过滤掉 data.table 中的重复/非唯一行

r - 带有nearPoints()的动态ggplot图层 Shiny

r - 在stat_summary_hex中,如果z是一个因数,为什么六边形重叠?

java - 在java中解析和比较字符串键的最有效算法

python - 实现一个名为 Average 的类作为 List 的子类