从具有 R 中行名称的向量向数据帧添加空行
Add empty row to dataframe from vector with row names in R
我有这样一个数据框:
DF =
C1 C2 C3
R1 9 2 7
R2 4 1 NA
R4 3 5 1
我有一个这样的向量:
V =
[1] "R3", "R5"
我该怎么做才能将向量添加到数据框中,以便向量中的项目成为具有 NA 值的新行的行名称?
我要获取的数据框是这样的:
DF =
C1 C2 C3
R1 9 2 7
R2 4 1 NA
R3 NA NA NA
R4 3 5 1
R5 NA NA NA
非常感谢!
实现您想要的结果的一个选项可能如下所示。我首先附加一些空行,将向量附加到行名,最后按行名对数据框进行排序:
df <- data.frame(
C1 = c(9, 4, 3),
C2 = c(2, 1, 5),
C3 = c(7, NA, 1),
row.names = paste0("R", c(1, 2, 4))
)
v <- c("R3", "R5")
rn <- row.names(df)
df[nrow(df) + seq_along(v), ] <- NA
row.names(df) <- c(rn, v)
df <- df[order(row.names(df)),]
df
#> C1 C2 C3
#> R1 9 2 7
#> R2 4 1 NA
#> R3 NA NA NA
#> R4 3 5 1
#> R5 NA NA NA
在tidyverse
中,我们可以用complete
扩展行名转换后的列,这样对于[=16=中的那些元素,其余的列都是NA
]
library(dplyr)
library(tidyr)
library(tibble)
df1 %>%
rownames_to_column('rn') %>%
complete(rn = union(rn, V)) %>%
column_to_rownames("rn")
-输出
C1 C2 C3
R1 9 2 7
R2 4 1 NA
R3 NA NA NA
R4 3 5 1
R5 NA NA NA
数据
df1 <- structure(list(C1 = c(9, 4, 3), C2 = c(2, 1, 5), C3 = c(7, NA,
1)), class = "data.frame", row.names = c("R1", "R2", "R4"))
V <- c("R3", "R5")
我有这样一个数据框:
DF =
C1 C2 C3
R1 9 2 7
R2 4 1 NA
R4 3 5 1
我有一个这样的向量:
V =
[1] "R3", "R5"
我该怎么做才能将向量添加到数据框中,以便向量中的项目成为具有 NA 值的新行的行名称?
我要获取的数据框是这样的:
DF =
C1 C2 C3
R1 9 2 7
R2 4 1 NA
R3 NA NA NA
R4 3 5 1
R5 NA NA NA
非常感谢!
实现您想要的结果的一个选项可能如下所示。我首先附加一些空行,将向量附加到行名,最后按行名对数据框进行排序:
df <- data.frame(
C1 = c(9, 4, 3),
C2 = c(2, 1, 5),
C3 = c(7, NA, 1),
row.names = paste0("R", c(1, 2, 4))
)
v <- c("R3", "R5")
rn <- row.names(df)
df[nrow(df) + seq_along(v), ] <- NA
row.names(df) <- c(rn, v)
df <- df[order(row.names(df)),]
df
#> C1 C2 C3
#> R1 9 2 7
#> R2 4 1 NA
#> R3 NA NA NA
#> R4 3 5 1
#> R5 NA NA NA
在tidyverse
中,我们可以用complete
扩展行名转换后的列,这样对于[=16=中的那些元素,其余的列都是NA
]
library(dplyr)
library(tidyr)
library(tibble)
df1 %>%
rownames_to_column('rn') %>%
complete(rn = union(rn, V)) %>%
column_to_rownames("rn")
-输出
C1 C2 C3
R1 9 2 7
R2 4 1 NA
R3 NA NA NA
R4 3 5 1
R5 NA NA NA
数据
df1 <- structure(list(C1 = c(9, 4, 3), C2 = c(2, 1, 5), C3 = c(7, NA,
1)), class = "data.frame", row.names = c("R1", "R2", "R4"))
V <- c("R3", "R5")