我正在重新格式化一些数据框,并想知道是否有更有效的方法将命名列添加到数据框,而不是下面的内容:
colnames(df) <- c("c1", "c2)
重命名当前列和:
df$c3 <- ""
创建一个新列。
有没有办法以更快的方式做到这一点?我正在尝试添加几十个命名列,这似乎是一种无效的方法来完成整个过程。
答案 0 :(得分:3)
以较短的方式使用您的方法:
cols_2_add=c("a","b","c","f")
df[,cols_2_add]=""
答案 1 :(得分:1)
使用merge
可以实现添加其他列的方法。在现有数据框上应用merge
,使用所需的列和空行创建的数据框。如果您要创建different types
列,这将非常有用。
例如:
# Existing dataframe
df <- data.frame(x=1:3, y=4:6)
#use merge to create say desired columns as a, b, c, d and e
merge(df, data.frame(a="", b="", c="", d="", e=""))
# Result
# x y a b c d e
#1 1 4
#2 2 5
#3 3 6
# Desired columns of different types
library(dplyr)
bind_rows(df, data.frame(a=character(), b=numeric(), c=double(), d=integer(),
e=as.Date(character()), stringsAsFactors = FALSE))
# x y a b c d e
#1 1 4 <NA> NA NA NA <NA>
#2 2 5 <NA> NA NA NA <NA>
#3 3 6 <NA> NA NA NA <NA>
答案 2 :(得分:0)
一个简单的循环可以帮助
name_list <- c('a1','b1','c1','d1')
# example df
df <- data.frame(a = runif(3))
# this adds a new column
for(i in name_list)
{
df[[i]] <- runif(3)
}
# output
a a1 b1 c1 d1
1 0.09227574 0.08225444 0.4889347 0.2232167 0.8718206
2 0.94361151 0.58554887 0.7095412 0.2886408 0.9803941
3 0.22934864 0.73160433 0.6781607 0.7598064 0.4663031
# in case of data.table, for-set provides faster version:
# example df
df <- data.table(a = runif(3))
for(i in name_list)
set(df, j=i, value = runif(3))