存储值的差异变化

  • 本文关键字:变化 存储 r
  • 更新时间 :
  • 英文 :


我想在从一个数据框中减去另一个数据框时,将值的差异和无差异存储到另一个数据框中。

例如,给定这个数据集:

> change
water water2
1      1      1
2      1      2
3      1      2
4      1      1
5      2      2
6      6      4
7      5      4
8      7      5
9      8      9
10     5      5
11     4      2
12     5      5
13     3      3
14     3      3
15     0      2
16     0      0
17     0      0

water2-water

当存在负差时,使得water>water2,赋值为-1。当存在正差时,使得water<water2赋值为1。否则,如果没有差异,则赋值为0。>

虽然,我更喜欢在两个数据框分开且不在单个数据中时这样做,例如:

y2010 <- water2
y2019 <- water

我正在处理一个更大的数据框,并且更愿意执行上面的计算并将这些差异存储在一个新的数据框中。

可再生的例子:

y2010 <- structure(list(water = c(1, 1, 1, 1, 2, 6, 5, 7, 8, 5, 4, 5, 
3, 3, 0, 0, 0)), class = "data.frame", row.names = c(NA, -17L
))
y2019 <- structure(list(water2 = c(1, 2, 2, 1, 2, 4, 4, 5, 9, 5, 2, 5, 
3, 3, 2, 0, 0)), class = "data.frame", row.names = c(NA, -17L
))

可以使用sign函数。如果差值为正,则返回1,如果差值为负,则返回-1,如果差值为0,则返回0:

df <- data.frame(change = sign(y2019$water2 - y2010$water))
change
1       0
2       1
3       1
4       0
5       0
6      -1
7      -1
8      -1
9       1
10      0
11     -1
12      0
13      0
14      0
15      1
16      0
17      0

您也可以尝试:

#Code
ydiff <- y2019$water2-y2010$water
index <- y2010$water>y2019$water2
index2 <- y2010$water<y2019$water2
ydiff[index]<--1
ydiff[index2]<-1
ydiff[!index & !index2]<-0
#Dataframe
df3 <- data.frame(ydiff=ydiff)

输出:

df3
ydiff
1      0
2      1
3      1
4      0
5      0
6     -1
7     -1
8     -1
9      1
10     0
11    -1
12     0
13     0
14     0
15     1
16     0
17     0

最新更新