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には、この種の機能、つまり$<-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
于 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 に答える