如何在 R 中将数据框标记为一列并拆分列?

How to make dataframe label a column and split column in R?

我使用以下代码将模型的结果提取到数据框中: df1 <- coef(summary(mod1))。我的模型结果数据框有我想要的 estimates/model 信息,但第一列没有注册为列,而是每一行的标签。

Q1) 如何将第一个标签列变成实际的列,在我尝试 df1$ 时显示?

Q2) 一旦我将第一列注册为列,我想在冒号处分隔值,因此我的数据框如下所示:

LandUse   Enzyme    estimate   se    zval   pval     ci.lb   ci.ub
Ag         acP        0.1      0.5   0.3   7.6e-01   -0.89   1.2
F          acP        0.9      0.4   2.1   2.8e-02    0.1    1.7
H          acP        0.2      0.7   0.2   7.8e-1    -1.2    1.6

我打算使用 stringr 包中的这段代码来制作上面的数据框:df1 <- str_split_fixed(df1$column1 ":") 这对于如何拆分列中的值是否正确,或者是否有更好的方法来执行此操作?

谢谢!

我们可以使用rownames_to_column将行名转换为列名,然后使用extract通过捕获

根据子字符串匹配拆分列
library(dplyr)
library(tidyr)
df1 %>%
   rownames_to_column('rn') %>%
   extract('rn', into = c("LandUse", "Enzyme"), "Land.Use(.*):Enzyme(.*)")

-输出

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

基础 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

您可以使用 rownames(df2) <- NULL 删除现在多余的行名称。


数据

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")