Saya memiliki hasil dari model yang saya ekstrak ke dalam kerangka data menggunakan kode ini: df1 <- coef(summary(mod1)). Kerangka data saya dengan hasil model memiliki perkiraan/info model yang saya inginkan tetapi kolom pertama tidak terdaftar sebagai kolom dan sebagai gantinya adalah label untuk setiap baris. masukkan deskripsi gambar di sini Apakah ini benar untuk cara membagi nilai di kolom atau adakah cara yang lebih baik untuk melakukan ini?

Terima kasih!

1
clions226 25 Mei 2021, 21:02

2 jawaban

Jawaban Terbaik

Dasar R

df2 <- cbind(strcapture("Land\\.Use([^:]+):Enzyme(.*)",
                        rownames(df1), list(LandUse="", Enzyme="")), df1)
df2
#                      LandUse Enzyme estimate  se zval  pval ci.lb ci.ub
# Land.UseAg:EnzymeacP      Ag    acP      0.1 0.5  0.3 0.760 -0.89   1.2
# Land.UseF:EnzymeacP        F    acP      0.9 0.4  2.1 0.028  0.10   1.7
# Land.UseH:EnzymeacP        H    acP      0.2 0.7  0.2 0.780 -1.20   1.6

Anda dapat menghapus nama baris yang sekarang berlebihan dengan rownames(df2) <- NULL.


Data

df1 <- structure(list(estimate = c(0.1, 0.9, 0.2), se = c(0.5, 0.4, 0.7), zval = c(0.3, 2.1, 0.2), pval = c(0.76, 0.028, 0.78), ci.lb = c(-0.89, 0.1, -1.2), ci.ub = c(1.2, 1.7, 1.6)), row.names = c("Land.UseAg:EnzymeacP", "Land.UseF:EnzymeacP", "Land.UseH:EnzymeacP"), class = "data.frame")
1
r2evans 25 Mei 2021, 18:07

Kita dapat mengonversi nama baris menjadi kolom dengan rownames_to_column, kemudian menggunakan extract untuk membagi kolom berdasarkan kecocokan substring dengan menangkap

library(dplyr)
library(tidyr)
df1 %>%
   rownames_to_column('rn') %>%
   extract('rn', into = c("LandUse", "Enzyme"), "Land.Use(.*):Enzyme(.*)")

-keluar

LandUse Enzyme estimate  se zval  pval ci.lb ci.ub
1      Ag    acP      0.1 0.5  0.3 0.760 -0.89   1.2
2       F    acP      0.9 0.4  2.1 0.028  0.10   1.7
3       H    acP      0.2 0.7  0.2 0.780 -1.20   1.6
1
akrun 25 Mei 2021, 18:10