一种向数据框添加新列的函数

时间:2013-01-13 22:21:45

标签: r

我需要一个向数据框df添加新列(具有常量值)的函数。到目前为止我的尝试是:

f = function(df, col.name, col.value){
  df$col.name = col.value
  print(df)
 }

典型的输入是:

f(df, "New column", NA)

这会给我一个值为NA的新列,但是它会被命名为col.name

任何帮助都非常感激。

3 个答案:

答案 0 :(得分:10)

R具有用于此类事物的内置函数,即$<-,用于分配单列数据。

> test <- data.frame(a=1:3,b=4:6)

> test
  a b
1 1 4
2 2 5
3 3 6

> `$<-`(test,"new_column",NA)
  a b new_column
1 1 4         NA
2 2 5         NA
3 3 6         NA

正如@MatthewLundberg在下面的评论中所说,如果你想避免使用时髦的功能名称,你可以将它分配给你的新功能:

> f <- `$<-`
> f(test,"new_column",NA)
  a b new_column
1 1 4         NA
2 2 5         NA
3 3 6         NA

答案 1 :(得分:3)

f = function(df, col.name, col.value){
  df[[col.name]] <- col.value
  print(df)
 }

如果您想接受@ flodel&@ 39和@theodore的评论,可以使用以下内容:

f <- function(df, col.name, col.value, overwrite = FALSE){

    if ( col.name %in colnames(df) ) {
        if ( overwrite ) {
            warning(paste("column", col.name, "overwritten!"))
        } else {
            stop(paste("column", col.name, "already exists!"))
        }
    }

    df[[col.name]] <- col.value 
    return(df)
}

答案 2 :(得分:0)

如果您知道新列的名称,则可以执行以下操作:

test <- data.frame(a=1:3,b=4:6)
test$c = c(1:3)