[英]Merge two data frames R
我創建了兩個數據框:
tab1 <- medivmind %>% select(medi_total_factor, participant_id) %>% filter(!is.na(medi_total_factor)) %>% count(medi_total_factor, .drop = FALSE) %>% add_column(diet = "medi") %>% rename(n_medi = n, score = medi_total_factor)
DF1
評分 n_medi 飲食
1 0 0 中號
2 0.5 0 中
3 1 7 中號
4 1.5 0 中
5 2 12 中號
6 2.5 0 中
...
tab2 <- medivmind %>% select(mind_total_factor, participant_id) %>% filter(!is.na(mind_total_factor)) %>% count(mind_total_factor, .drop = FALSE) %>% add_column(diet = "mind") %>% rename(n_mind = n, score = mind_total_factor)
DF2
得分 n_mind 飲食
1 0 0 頭腦
2 0.5 0 介意
3 1 0 頭腦
4 1.5 0 介意
5 2 0 心
6 2.5 0 介意
...
我想合並它們看起來像:
得分 n_mind 飲食
1 0 0 頭腦
2 0 0 媒體
3 0.5 0 介意
4 0.5 0 中
5 1 0 頭腦
6 1 0 中號
7 1.5 0 介意
8 1.5 0 中
...
我試過 rbind、cbind、left_join 但我不斷得到以下(或變體):
得分 n_medi 飲食得分 n_mind 飲食
1 0 0 中間 0 0 頭腦
2 0.5 0 中 0.5 0 頭腦
3 1 7 中 1 0 頭腦
4 1.5 0 中 1.5 0 頭腦
5 2 12 中 2 0 頭腦
更新:你想要這個:
tab3 <- left_join(tab1, tab2, by="score") %>%
pivot_longer(starts_with("diet")) %>%
select(score, n_medi, n_mind, diet=value) %>%
group_by(score) %>%
arrange(desc(diet), .by_group = TRUE) %>%
mutate(n_medi = ifelse(lead(n_medi==n_medi), n_medi, NA))
score n_medi n_mind diet
<dbl> <int> <int> <chr>
1 0 0 0 mind
2 0 NA 0 medi
3 0.5 0 0 mind
4 0.5 NA 0 medi
5 1 7 0 mind
6 1 NA 0 medi
7 1.5 0 0 mind
8 1.5 NA 0 medi
9 2 12 0 mind
10 2 NA 0 medi
11 2.5 0 0 mind
12 2.5 NA 0 medi
我們可以這樣做:
library(dplyr)
library(tidyr)
left_join(DF1, DF2, by="score") %>%
pivot_longer(starts_with("diet")) %>%
select(score, n_medi, diet=value) %>%
group_by(score) %>%
arrange(desc(diet), .by_group = TRUE)
score n_medi diet
<dbl> <int> <chr>
1 0 0 mind
2 0 0 medi
3 0.5 0 mind
4 0.5 0 medi
5 1 7 mind
6 1 7 medi
7 1.5 0 mind
8 1.5 0 medi
9 2 12 mind
10 2 12 medi
11 2.5 0 mind
12 2.5 0 medi
數據:
> dput(DF1)
structure(list(score = c(0, 0.5, 1, 1.5, 2, 2.5), n_medi = c(0L,
0L, 7L, 0L, 12L, 0L), diet = c("medi", "medi", "medi", "medi",
"medi", "medi")), class = "data.frame", row.names = c("1", "2",
"3", "4", "5", "6"))
> dput(DF2)
structure(list(score = c(0, 0.5, 1, 1.5, 2, 2.5), n_mind = c(0L,
0L, 0L, 0L, 0L, 0L), diet = c("mind", "mind", "mind", "mind",
"mind", "mind")), class = "data.frame", row.names = c("1", "2",
"3", "4", "5", "6"))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.