我需要一个向数据框添加新列(具有常量值)的函数df
。到目前为止,我的尝试是这样的:
f = function(df, col.name, col.value){
df$col.name = col.value
print(df)
}
典型的输入是:
f(df, "New column", NA)
这会给我一个值为 NA 的新列,但是,它将被命名为col.name
.
非常感谢任何帮助。
我需要一个向数据框添加新列(具有常量值)的函数df
。到目前为止,我的尝试是这样的:
f = function(df, col.name, col.value){
df$col.name = col.value
print(df)
}
典型的输入是:
f(df, "New column", NA)
这会给我一个值为 NA 的新列,但是,它将被命名为col.name
.
非常感谢任何帮助。
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
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)
}
如果您知道新列的名称,您可以这样做:
test <- data.frame(a=1:3,b=4:6)
test$c = c(1:3)