所以我有這個資料框:
dat1 <- data.frame(id=1:n,
group=rep(LETTERS[1:2], n/2),
age=sample(18:30, n, replace=TRUE),
type=NA,
op=factor(paste0("op", 1:n)),
x=NA)
dat1
dat2 <- data.frame(id=1:n,
group=rep(LETTERS[1:2], n/2),
age=NA,
type=factor(paste0("type", 1:n)),
op=NA,
x=rnorm(n))
dat <- full_join(dat1,dat2) %>% arrange(id)
dat
id group age type op x
1 1 A 19 <NA> op1 NA
2 1 A NA type1 <NA> 0.18819303
3 2 B 29 <NA> op2 NA
4 2 B NA type2 <NA> 0.11916096
5 3 A 19 <NA> op3 NA
6 3 A NA type3 <NA> -0.02509255
7 4 B 28 <NA> op4 NA
8 4 B NA type4 <NA> 0.10807273
9 5 A 27 <NA> op5 NA
10 5 A NA type5 <NA> -0.48543524
11 6 B 26 <NA> op6 NA
12 6 B NA type6 <NA> -0.50421713
該資料集每個觀察值有多行,而一些變數存盤在一行中,而另一些則存盤在另一行中。我喜歡以整潔的格式使用它,每個 ID 只有一行。我可以過濾成兩個資料框然后重新加入,但必須有更簡單的方法。Summarize 可以作業,但只適用于數字變數.. 組用 id 固定,不同組中沒有相同的 id
group_by(id) %>%
summarise_if(is.numeric, sum, na.rm=T)
data
似乎必須有一個非常簡單的解決方案,但我無法弄清楚。感謝幫助!
uj5u.com熱心網友回復:
從tmfmnk 的這個回答到一個類似的問題,你應該能夠通過在最后添加這個代碼塊來解決這個問題:
dat <- dat %>%
group_by(id) %>%
summarize(across(everything(), ~ first(na.omit(.))))
dat
鏈接中的問題僅適用于數字的特殊情況,但此代碼塊一般應該有效。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/343675.html
