我有一個看起來像這樣的資料集:
name status
1 john sick
2 john sick
3 john healthy
4 john sick
5 john healthy
6 alex sick
7 alex sick
8 tim healthy
9 tim healthy
10 tim sick
11 tim sick
對于這個資料集,我想找出人們去的次數:
- 生病到生病
- 生病到健康
- 健康到健康
- 健康到生病
例如:
- Sick to Sick:John(生病,生病),Alex(生病,生病),Tim(生病,生病)=在資料集中出現 3 次
- Sick to Healthy:John(sick,healthy),John(sick,healthy)=在資料集中出現 2 次
- 健康到健康:Tim(健康,健康)=在資料集中出現 1 次
- 從健康到生病:John(健康,生病),Tim(健康,生病)=在資料集中出現 2 次
我不確定如何在 R 中解決這個問題 - 有人可以建議如何做到這一點嗎?
謝謝!
uj5u.com熱心網友回復:
我會使用dplyr::lag()and來解決這個問題count():
library(dplyr)
library(tidyr)
df1 %>%
group_by(name) %>%
mutate(from = dplyr::lag(status)) %>%
ungroup() %>%
count(from, to = status) %>%
drop_na()
輸出:
# A tibble: 4 × 3
from to n
<chr> <chr> <int>
1 healthy healthy 1
2 healthy sick 2
3 sick healthy 2
4 sick sick 3
uj5u.com熱心網友回復:
從技術上講,列聯表是具有兩個(或更多)維度條目的表。因此:
ct <- table(
do.call(rbind, by(data, data$name, function(x)
data.frame(from = head(x$status, -1), to = tail(x$status, -1)))))
ct
#> to
#> from healthy sick
#> healthy 1 2
#> sick 2 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/520992.html
標籤:r数据操作
上一篇:如果串列為空,則顫動GridView.builder錯誤
下一篇:如何將一個小部件向前旋轉另一個?
