我有 4 個 data.frames ( d1,...d4)。其中一些 data.frames 的列比其他的少一些。
我想知道如何自動找到任何colnames:"emmean","SE","t.ratio","df","p.value","lower.CL","upper.CL"
然后將它們
"Mean","SE","t","Df","p-value","Lower","Upper"分別重命名為: ?
附言。我們保留所有其他列不變。請注意,我沒有 data.frames 串列。我可能只得到下面的 data.frames 之一。
d1="
training_hr time emmean SE df lower.CL upper.CL t.ratio p.value
23.145 Baseline NA NA NA NA NA NA NA
23.145 Post-test1 0.428 0.134 70.000 0.161 0.695 3.199 0.002
23.145 Post-test2 NA NA NA NA NA NA NA"
d1 = read.table(text=d1,h=T)
d2="
training_hr time emmean SE df lower.CL upper.CL t.ratio
23.145 Baseline NA NA NA NA NA NA
23.145 Post-test1 0.428 0.134 70.000 0.161 0.695 3.199
23.145 Post-test2 NA NA NA NA NA NA"
d2= read.table(text=d2,h=T)
d3="
training_hr time emmean SE df t.ratio p.value
23.145 Baseline NA NA NA NA NA
23.145 Post-test1 0.428 0.134 70.000 3.199 0.002
23.145 Post-test2 NA NA NA NA NA"
d3=read.table(text=d3,h=T)
d4="
training_hr emmean SE df t.ratio p.value
23.145 NA NA NA NA NA
23.145 0.428 0.134 70.000 3.199 0.002
23.145 NA NA NA NA NA"
d4=read.table(text=d4,h=T)
uj5u.com熱心網友回復:
資料表
您可以使用setnamesfrom data.table,它將舊名稱和新名稱作為單獨的串列。而對于tidyverse,您必須同時給出舊名稱和新名稱(例如,Mean = "emmean")。但注意setnames會更改您的原始資料框(通過參考更改它們)。
library(data.table)
setnames(df1, old = c("emmean","SE","t.ratio","df","p.value","lower.CL","upper.CL"),
new = c("Mean","SE","t","Df","p-value","Lower","Upper"), skip_absent=TRUE)
輸出
d1
training_hr time Mean SE Df Lower Upper t p-value
1 23.145 Baseline NA NA NA NA NA NA NA
2 23.145 Post-test1 0.428 0.134 70 0.161 0.695 3.199 0.002
3 23.145 Post-test2 NA NA NA NA NA NA NA
Tidyverse
使用tidyverse,您可以創建一個包含所有可能名稱更改的外部向量,然后使用anyinside rename。
library(tidyverse)
lookup <- c(Mean = "emmean", SE = "SE", t = "t.ratio", DF = "df", "p-value" = "p.value", Lower = "lower.CL", Upper = "upper.CL")
d1 %>%
rename(any_of(lookup))
# training_hr time Mean SE DF Lower Upper t p-value
#1 23.145 Baseline NA NA NA NA NA NA NA
#2 23.145 Post-test1 0.428 0.134 70 0.161 0.695 3.199 0.002
#3 23.145 Post-test2 NA NA NA NA NA NA NA
對于多個資料框,您可以將資料框放入串列中,然后使用mapfrompurrr和setnamesfrom的組合data.table。這也將通過參考更新所有原始資料幀(即 , d1, d2...)。
library(data.table)
library(tidyverse)
df.list <- list(d1, d2, d3, d4)
map(df.list, ~ setnames(.x, old = c("emmean","SE","t.ratio","df","p.value","lower.CL","upper.CL"),
new = c("Mean","SE","t","Df","p-value","Lower","Upper"), skip_absent=TRUE))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/444660.html
