如何在 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")
我使用以下代码将模型的结果提取到数据框中: 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")