bugfix> r > 投稿

私は0から0.6の範囲のn個の数字を持っています。この値を複数の条件ステートメントでグループ化する新しい列を作成したいと思います。 数値が0〜0.1の場合。名前を付ける= 0.1; 0.1〜0.2、グループ= 0.2;0.2〜0.3、グループ= 0.3;等々。

value<- runif(20, min=0, max=0.6)
df<- data.frame(value)

私はこの方法を試しましたが、機能していません。最初の値に正しい答えを割り当てているだけで、残りの値には割り当てていません。

#Assigning groups for values
for (i in seq(1, length(df$value))) {
  if (df$value[i] > 0 & df$value[i] <= 0.1 ){
    df$group[i]<- "0.1"
  } else if (df$value[i] > 0.1 & df$value[i] <= 0.2 ){
    df$group[i]<- "0.2"
  } else if (df$value[i] > 0.2 & df$value[i] <= 0.3 ){
    df$group[i]<- "0.3"
  } else if (df$value[i] > 0.3 & df$value[i] <= 0.4 ){
    df$group[i]<- "0.4"
  } else if (df$value[i] > 0.4 ){
    df$group[i]<- "0.5" 
  }
return(df) 
}

これを行うための任意のアイデアまたはより良い方法。前もって感謝します。

回答 2 件
  • 使用できます plyr s round_any 関数

    df$value1 <- plyr::round_any(df$value, 0.1, ceiling)
    df
    #        value value1
    #1  0.59465953    0.6
    #2  0.10581043    0.2
    #3  0.48806113    0.5
    #4  0.04106798    0.1
    #5  0.24026985    0.3
    #6  0.08468660    0.1
    #7  0.11598592    0.2
    #8  0.50481103    0.6
    #9  0.43194839    0.5
    #10 0.16032725    0.2
    #11 0.29700099    0.3
    #12 0.04986834    0.1
    #13 0.21233054    0.3
    #14 0.58152528    0.6
    #...
    
    

  • ザ・ cut 関数は数値ベクトルを因数に変換できます。

    df$group = cut(df$value,
               breaks = c(0,0.1,0.2,0.3,0.4,0.5,0.6),
               labels = c('0.1','0.2','0.3','0.4','0.5','0.6'))
    head(df)
    #      value group
    #1 0.4204752   0.5
    #2 0.4691363   0.5
    #3 0.3926192   0.4
    #4 0.0418944   0.1
    #5 0.1074853   0.2
    #6 0.1914169   0.2
    levels(df$group)
    #[1] "0.1" "0.2" "0.3" "0.4" "0.5" "0.6"
    
    

あなたの答え