我的数据框如下所示:
df <- data.frame('2' = -.05, '3' = -.01, '5' = .2)
我想插入另一个标题为“&#39; 4&#39;其值为0,并将其插入正确的位置(第3列)。 最终结果应如下所示:
df <- data.frame('2' = -.05, '3' = -.01, '4' = 0, '5' = .2)
我还需要这个工作给定任何数据框,缺少的列都归档。例如:
df <- data.frame('2' = -.15, '6' = .11)
变为
df <- data.frame('2' = -.05, '3' = 0, '4' = 0, '5' = 0, '6' = .11)
感谢您的任何帮助或建议。
答案 0 :(得分:1)
我们可以在base R
中执行此操作。建议不要使用以数字开头的列名称,因此默认情况下check.names = TRUE
中的data.frame
,因此当我们创建data.frame
时,它会附加一个'X'作为前缀。为避免这种情况,请使用check.names = FALSE
获取“数据”的names
,将其转换为numeric
,获取range
并找到序列
v1 <- Reduce(`:`, range(as.numeric(names(df))))
然后,我们创建一个data.frame
,其值为0,列名为“v1”
df2 <- as.data.frame.list(setNames(numeric(length(v1)), v1), check.names = FALSE)
根据'df'
中的列名分配'df2'中的值df2[names(df)] <- df
df2
# 2 3 4 5
#1 -0.05 -0.01 0 0.2
它可以转换为函数
f1 <- function(dat){
v1 <- Reduce(`:`, range(as.numeric(names(dat))))
df2 <- as.data.frame.list(setNames(numeric(length(v1)), v1),
check.names = FALSE)
df2[names(dat)] <- df
df2
}
df <- data.frame('2' = -.15, '6' = .11, check.names = FALSE)
f1(df)
# 2 3 4 5 6
# 1 -0.15 0 0 0 0.11
df <- data.frame('2' = -.05, '3' = -.01, '5' = .2, check.names = FALSE)
答案 1 :(得分:0)
我使用了tibbles而不是data.frames,因为它们可以使用数字作为列名(只需要用反引号```来转义它们。
library(tidyverse)
df <- tibble(`2` = -.15, `6` = .11)
fix_tibble <- function(x) {
form <- tibble( `2` = NA_real_,
`3` = NA_real_,
`4` = NA_real_,
`5` = NA_real_,
`6` = NA_real_)
bind_rows(form, x) %>%
select(`2`,`3`,`4`,`5`,`6`) %>%
.[-1,]}
fix_tibble(df)