4

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

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

典型的输入是:

f(df, "New column", NA)

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

非常感谢任何帮助。

4

3 回答 3

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
于 2013-01-13T22:59:19.233 回答
3
f = function(df, col.name, col.value){
  df[[col.name]] <- col.value
  print(df)
 }

如果您想容纳@flodel 和@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)
}
于 2013-01-13T22:27:06.177 回答
0

如果您知道新列的名称,您可以这样做:

test <- data.frame(a=1:3,b=4:6)
test$c = c(1:3)
于 2016-08-08T17:06:09.383 回答