3

mtcarsのようなデータフレームがあります

「c」で始まるmtcarsのすべての変数を検索し、それらを文字に変換してmtcarsに保存する関数をプログラムしたいと思います。

4

2 に答える 2

4

1 つの方法を次に示します。

f <- function(x, str = "^var") {
    want <- grep(str, names(x))
    x[, want] <- sapply(x[, want], as.character)
    x
}

[編集: コメントで @hadley によって提起されたポイントを実装する代替バージョン。]

f <- function(x, str = "^var") {
    want <- grepl(str, names(x))
    x[, want] <- lapply(x[, want], as.character)
    x
}

この関数を使用すると、一致させたい文字列を渡すことができますが、デフォルト"^var"は要求どおりになります。は、 を含む名前ではなく、"^"で始まる名前を検索することを示します。"var""var"

例:

> bigdf <- data.frame(var1 = LETTERS[1:3], var2 = letters[1:3], var3 = 1:3, 
+                     stuff = 4:6)
> bigdf
  var1 var2 var3 stuff
1    A    a    1     4
2    B    b    2     5
3    C    c    3     6
> 
> bigdf2 <- f(bigdf)
> bigdf2
  var1 var2 var3 stuff
1    A    a    1     4
2    B    b    2     5
3    C    c    3     6
> str(bigdf2)
'data.frame':   3 obs. of  4 variables:
 $ var1 : chr  "A" "B" "C"
 $ var2 : chr  "a" "b" "c"
 $ var3 : chr  "1" "2" "3"
 $ stuff: int  4 5 6
于 2011-03-26T12:11:55.267 に答える
2

grep の別の機能と別のバージョンの "[" 演算子を示す別のバリエーション:

f <- function(x, str = "^var") {
    want <- grep(str, names(x), value=TRUE)
    x[want] <- lapply(x[want], as.character)
    x
}

value=TRUE 引数は、位置ではなく一致する名前を返します。これは完全な列単位の操作であるため、実際に使用する必要[ , want]はなく、代わりに使用できます。[want]列が一致しない場合でも、それ(およびシンプソンのバージョン)が完全な data.frame を返すことを確認しました。この回答を「受け入れ」ないでください...コメント以上のものではありませんが、コメントの関数構造を読むのは本当に難しいです。

于 2011-03-26T17:47:48.587 に答える