我需要一个向数据框df
添加新列(具有常量值)的函数。到目前为止我的尝试是:
f = function(df, col.name, col.value){
df$col.name = col.value
print(df)
}
典型的输入是:
f(df, "New column", NA)
这会给我一个值为NA的新列,但是它会被命名为col.name
。
任何帮助都非常感激。
答案 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)