データフレームに(定数値の)新しい列を追加する関数が必要です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には、この種の機能、つまり$<-
1列のデータを割り当てるための関数が組み込まれています。
> 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)