【问题标题】:How do I perform mathematical operations between values in two columns of an R data frame based on their position?如何根据位置在 R 数据框的两列中的值之间执行数学运算?
【发布时间】:2014-04-16 17:38:34
【问题描述】:

我正在做一个 R 项目,我试图比较频率和它们各自的值。本质上,我有一个 11852X3 列数据框,其位置编号位于插槽 1 中,第二列中的唯一值范围为 1-11852,然后在第 3 列中的不同位置具有相同的唯一值集。

本质上是因为第 2 列和第 3 列中的值重叠,我想根据最左侧的位置编号(第 1 列)找到这两个值之间的差异,并将其存储在另一个数据框中。因此,如果第二列的位置一的值为 2017,然后第三列的位置一的值也为 2017,则新数据框的条目将为 2017,然后值为 0,因为它们具有相同的位置。如果第 2 列在第二个位置的值为 5276,而第 3 列在第 73 位的值为 5276,则新数据框的值为 70。

我希望得到一些关于如何做到这一点的指导。谢谢。

【问题讨论】:

  • 欢迎来到 SO。请提供一个独立的最小示例。检查这些链接以获得一般想法,以及如何在 R 中进行操作:herehereherehere。您还应该向我们展示您尝​​试过的代码。干杯。

标签: r sorting difference


【解决方案1】:

如果以下代码对您有用,请告诉我。如果第 3 列中的数字高于第 2 列中的数字,则代码将生成负值。

#Generate simulated data
n = 20
x <- data.frame(c1 = c(1:n), c2 = sample(n),c3 = sample(n))

#Calculate diff in position by taking difference in order
x$diff = order(x$c3)- order(x$c2)
#Reassign difference to its correct position
x$diff[order(x$c2)] <- x$diff
x
   c1 c2 c3 diff
1   1 12  8    4
2   2 11  5    9
3   3  7  4    6
4   4 15  3   12
5   5 19 12   12
6   6 13  1   12
7   7  9 14   12
8   8 18 16    7
9   9  8  7   -8
10 10 16 20   -2
11 11  6 11    1
12 12  4  6   -9
13 13 14 10   -6
14 14  5 17  -12
15 15 10 18   -2
16 16  1 15  -10
17 17  3 19  -13
18 18  2 13    2
19 19 17  9   -5
20 20 20  2  -10

【讨论】:

    猜你喜欢
    • 2016-03-15
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多