31

数値列と順序付けられた因子列を含むデータ フレームがあります。私は多くの NA 値を持っているので、レベルは割り当てられません。NA を「無回答」に変更しましたが、因子列のレベルにはそのレベルが含まれていないため、開始方法は次のとおりですが、エレガントな方法で終了する方法がわかりません。

addNoAnswer = function(df) {
   factorOrNot = sapply(df, is.factor)
   levelsList = lapply(df[, factorOrNot], levels)
   levelsList = lapply(levelsList, function(x) c(x, "No Answer"))
   ...

新しいレベルを因子列に直接適用する方法はありますか。たとえば、次のようになります。

df[, factorOrNot] = lapply(df[, factorOrNot], factor, levelsList)

もちろん、これは正しく動作しません。

レベルの順序を維持し、「無回答」レベルを最後に追加したい。

4

5 に答える 5

30

レベルを因子に追加する関数を定義できますが、それ以外は返すだけです。

addNoAnswer <- function(x){
  if(is.factor(x)) return(factor(x, levels=c(levels(x), "No Answer")))
  return(x)
}

次に、lapplyこの関数を列に追加します

df <- as.data.frame(lapply(df, addNoAnswer))

それはあなたが望むものを返すはずです。

于 2014-04-26T21:54:41.213 に答える