将命名列添加到R

时间:2018-02-28 20:36:49

标签: r dataframe

我正在重新格式化一些数据框,并想知道是否有更有效的方法将命名列添加到数据框,而不是下面的内容:

colnames(df) <- c("c1", "c2)

重命名当前列和:

df$c3 <- ""

创建一个新列。

有没有办法以更快的方式做到这一点?我正在尝试添加几十个命名列,这似乎是一种无效的方法来完成整个过程。

3 个答案:

答案 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))