私は現在、これに似たデータファイルを持っています:
R ID A B
1 A1 0 0
2 A1 2 4
3 A1 4 8
4 A2 0 0
5 A2 3 3
6 A2 6 6
「ID」が一致する場合にのみ、前の行から「(8-4)/(4-2)」を計算するスクリプトを作成したいと思います。たとえば、行3の列「C」の出力で、「ID」列のA1 == A1の場合、(8-4)/(4-2)= 2です。A1!= A1の場合、出力は0です。
出力は次のようになります。
R ID A B C
1 A1 0 0 0
2 A1 2 4 2
3 A1 4 8 2
4 A2 0 0 0
5 A2 3 3 1
6 A2 6 6 1
うまくいけば、私はこれを混乱しない方法で正しく説明しました。
行間の差を計算して除算group_by
ID
するdiff
ために使用できます。
library(dplyr)
df %>% group_by(ID) %>% mutate(C = c(0, diff(B)/diff(A)))
# R ID A B C
# <int> <fct> <int> <int> <dbl>
#1 1 A1 0 0 0
#2 2 A1 2 4 2
#3 3 A1 4 8 2
#4 4 A2 0 0 0
#5 5 A2 3 3 1
#6 6 A2 6 6 1
同様に使用する data.table
library(data.table)
setDT(df)[, C := c(0, diff(B)/diff(A)), ID]
データ
df <- structure(list(R = 1:6, ID = structure(c(1L, 1L, 1L, 2L, 2L,
2L), .Label = c("A1", "A2"), class = "factor"), A = c(0L, 2L,
4L, 0L, 3L, 6L), B = c(0L, 4L, 8L, 0L, 3L, 6L)), class = "data.frame",
row.names = c(NA, -6L))
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加