10

同じ操作を実行する必要があるデータ フレームが多数あるとします。例えば:

prefix <- c("Mrs.","Mrs.","Mr","Dr.","Mrs.","Mr.","Mrs.","Ms","Ms","Mr")
measure <- rnorm(10)
df1 <- data.frame(prefix,measure)
df1$gender[df1$prefix=="Mrs."] <- "F"

隣接する行の値が「Mrs.」の場合、gender という指標変数が作成されます。R で文字列変数をループする一般的な方法は、"i" から引用符を削除する関数を追加して、ここから適応されました。as.name()

dflist <- c("df1","df2","df3","df4","df5")

for (i in dflist) { 
  as.name(i)$gender[as.name(i)$prefix=="Ms."] <- "F"
  }

残念ながら、これは機能しません。助言がありますか?

4

2 に答える 2

11

すべてのデータフレームをリストに入れてから、それらをループ/lapplyオーバーします。長期的には、はるかに簡単になります。

dfList <- list(df1=df1, df2=df2, ....)

dfList <- lapply(dfList, function(df) {
    df$gender[df$prefix == "Mrs."] <- "F"
    df
})

dfList$df1
于 2013-07-13T20:49:53.653 に答える
2

単一インスタンスの例では、「F」以外の値が<NA>R 関数内でうまく機能しないため、実際には通常の意味でインジケーターを作成しません。算術演算と論理演算の両方が を返します。代わりにこれを試してください:

  df1$gender <- ifelse(prefix %in% c("Mrs.", "Ms") , "probably F",
                ifelse( prefix=="Dr.", "possibly F",  # as is my wife.
                                       "probably not F"))

次に、@HongDoi のアドバイスに従ってリストを使用します。そして、a) 完全な dataframe-object を返すこと、および b) 結果をオブジェクト名に割り当てることを忘れないでください (どちらも図に示されていますが、R-newbs ではしばしば忘れられます)。

于 2013-07-13T20:56:19.407 に答える