我想在从一个数据框中减去另一个数据框时,将值的差异和无差异存储到另一个数据框中。
例如,给定这个数据集:
> 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