我很難在一個資料集中旋轉不同的變數。我的原始資料集如下所示:
childid<- c(m1, m2,m3,m4,m5)
begin.age<-c(12,3,NA,4, 5)
end.age<-c(14,5,6,NA, 7)
begin.weight<- c(1,3,NA,4, 5)
end.weight <-c(4,5,7,NA, 8)
phase<-c(1,2,3,4,5)
df<- data.frame(childid, begin.age, end.age, begin.weight, end.weight,phase)
現在,我正在嘗試使用 pivot_longer 函式來調整年齡和體重,理想的輸出應該是:
childid timepoint age weight phase
m1 begin 12 1 1
m1 end 14 4 1
m2 begin 3 3 3
m2 end 5 5 3
m3 begin NA NA 4
m3 end 6 7 4
.....
我試圖將資料集拆分為兩個子資料集,并使用 piovt_longer 轉換每個變數(年齡、體重),但我無法使用 left_join 成功將它們合并回來。合并的資料集是應有的數倍。我假設 bc 資料是重復收集的,并且兩個資料集都沒有唯一的合并鍵。
df_a<-df%>%
pivot_longer (
cols=c(`begin.age`,`end.age`)
names_to="timepoint",
values_to="age"
df_w<-df%>%
pivot_longer (
cols=c(`begin.weight`,`end.weight`)
names_to="timepoint",
values_to="weight"
)
df_p<- df_a%>%
left_join (df_w, by="childid")
有沒有其他更好的方法可以在不拆分 R 中的資料集的情況下實作這一目標?非常感謝~~!
uj5u.com熱心網友回復:
也許這有幫助
library(tidyr)
pivot_longer(df, cols = matches('^(begin|end)'),
names_to = c("timepoint", ".value"),
names_pattern = "(.*)\\.(\\w )$", values_drop_na = TRUE)
資料
df <- structure(list(childid = c("m1", "m2", "m3", NA, "m4"), begin.age = c(12,
3, NA, 4, 5), end.age = c(14, 5, 6, NA, 7), begin.weight = c(1,
3, NA, 4, 5), end.weight = c(4, 5, 7, NA, 8), phase = c(1, 2,
3, 4, 5)), class = "data.frame", row.names = c(NA, -5L))
uj5u.com熱心網友回復:
替代方法:類似于 akrun 的方法,但使用names_sep而不是names_pattern:
library(dplyr)
library(tidyr)
df %>%
pivot_longer(
cols = -c(childid, phase),
names_to = c("timepoint", ".value"),
names_sep = "\\.",
values_drop_na = TRUE
)
childid phase timepoint age weight
<chr> <dbl> <chr> <dbl> <dbl>
1 m1 1 begin 12 1
2 m1 1 end 14 4
3 m2 2 begin 3 3
4 m2 2 end 5 5
5 m3 3 end 6 7
6 m4 4 begin 4 4
7 m5 5 begin 5 5
8 m5 5 end 7 8
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/418391.html
標籤:
上一篇:過濾鏡像分隔符未配對的行
