我想找出每個事件(B,C,D)與初始事件(A)相比,每個id的高度變化。例如,A1到B1的變化是5,或者A1到C1的變化是11。
df <- data. frame(event=c(rep('A。 4)。 rep('B'>, 4)。 rep('C'/span>。 4)。 rep('D'>, 4))。 id=rep(1。 4,4)。 高度 = c(1。 4, 2, 4, 6, 8, 9, 6, 12, 15, 13, 16,21, 24, 26,24))
事件ID高度
1 A 1 1
2 A 2 4
3 A 3 2
4 A 4 4
5 B 1 6
6 B 2 8
7 B 3 9
8 B 4 6
9 C 1 12
10C 2 15
11 C 3 13
12C 4 16
13 D 1 21
14 D 2 24
15 D 3 26
16 D 4 24
為了嘗試回答這個問題,我制作了一個單獨的資料框架,其中只有初始事件點,然后從每個事件組中減去它們。
df_a < -過濾器(df, 事件=="A") #只過濾了初始事件點。
df %>%
group_by(event) %>% #grouped events
mutate(增長=高度-df_a$height) #按初始事件減去分組的事件點數
事件ID高度增長
1 A 1 1 0
2 A 2 4 0
3 A 3 2 0
4 A 4 4 0
5B 1 6 5
6 B 2 8 4
7 B 3 9 7
8 B 4 6 2
9C 1 12 11
10 C 2 15 11
11 C 3 13 11
12 C 4 16 12
13 D 1 21 20
14 D 2 24 20
15D 3 26 24
16D 4 24 20
但我擔心重復、遺漏或輸入錯誤的事件或ID可能會破壞這種矢量的方法。我需要關于如何確認我將為每個各自的ID找到正確的變化的建議。(A1到B1、C1或D1)和(A2到B2、C2、D2),等等。
我可以用回圈來做這個嗎?我對回圈不是很有信心,但回圈是否可以通過確認只有匹配的ID可以使用來完成這個任務呢?
或者我怎樣才能確認每個初始ID在每個事件中都有一個相應的ID(或NA),從而使矢量方法在100%的時間內都能發揮作用。
謝謝你。
uj5u.com熱心網友回復:
通過'id'進行分組,然后從'事件'為'A'的'高度'子集中進行減法。 為了避免任何缺失的值,使用in%而不是==(因為%in%對于NA回傳FALSE,而==回傳NA),同時,在子集之后,獲得第一個元素([1]),以防有重復的元素
library(dplyr)
df %>%。
group_by(id)%>%
mutate(增長=高度-高度[/span>事件%in% 'A'][1]) %> %
解除組
輸出
# A tibble: 16 x 4
事件ID高度增長
<chr> <int> <int> <int>
1 A 1 1 0
2 A 2 4 0
3 A 3 2 0
4 A 4 4 0
5B 1 6 5
6 B 2 8 4
7 B 3 9 7
8 B 4 6 2
9C 1 12 11
10 C 2 15 11
11 C 3 13 11
12 C 4 16 12
13 D 1 21 20
14 D 2 24 20
15D 3 26 24
16D 4 24 20
我們也可以測驗在一個 "id "中沒有 "A "的地方
。> df %>%
slice(-1) %> % # 移除第一行 %>。
group_by(id) %> %
mutate(growth = height -高度[/span>事件%in% 'A'][1]) %> %
ungroup
# A tibble: 15 x 4
事件 ID 高度增長
<chr> <int> <int> <int>
1 A 2 4 0
2 A 3 2 0
3 A 4 4 0
4 B 1 6 NA #注意這些案例的NA #注意這些案例的NA
5 B 2 8 4
6 B 3 9 7
7 B 4 6 2
8 C 1 12 NA
9C 2 15 11
10 C 3 13 11
11 C 4 16 12
12 D 1 21 NA
13D 2 24 20
14D 3 26 24
15D 4 24 20
data
df < -結構(list(event = c("A"/span>。 "A"/span>。 "A", "A", "B"。 "B"/span>, "B"/span>。 "B",
"C", "C"。 "C"/span>, "C"/span>。 "D", "D", "D"。 "D")。 id = c(1L, 2L, 3L。 4L, 4L,
1L, 2L。 3L, 4L。 1L, 2L。 3L, 4L。 1L, 2L, 3L。 4L)。 高度 = c(1L,
4L,/span> 2L。 4L, 6L。 8L, 9L, 6L。 12L, 15L。 13L,/span> 16L。 21L, 24L。 26L,
24L))。 class = "data. frame",行。 names = c("1"/span>。 "2", "3"。 "4",
"5", "6", "7"。 "8", "9", "10"。 "11", "12", "13"。 "14", "15",
"16"))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/332221.html
標籤:
