アプリ版:「スタンプのみでお礼する」機能のリリースについて

Rでデータをいじりたいのですができなくて困っています。したいことは以下の通りです。
途中まででもいいので分かる方いたら教えてください。

・n行10列のデータフレームで、1~6までの数字がランダムに書かれたものがある
①1~6までの数字にそれぞれ名前をつける(1=”a”, 2="b"…)
②各行ごとに、a,b…と名前がついたものがいくつあるかの行列を作りたい。つまり、n行6列のデータフレームにする。

ちなみに名前はつけなくても、とにかく各行ごとに各数字の個数が表せれば問題ありません。(なお順番は1からがよいです)

例えば、
1234543211
1234512312
2262412124
1235232344
というものがあったら、これを
322210
332110
240201
132210
にしたいということです。

データはcsv.から読み込んでいます。スクリプトでも関数でもよいです。どうぞよろしくお願いします。

A 回答 (1件)

企業でSQCを推進する立場の者です。



アルファベットに置き換える必要性はありませんよね。
とりあえず、全部コピペして実行してみて下さい。

すると、出力はこうなります。
行番号が出ますが、それはyが配列だからです。

X1 X2 X3 X4 X5 X6
1 3 2 2 2 1 0
2 3 3 2 1 1 0
3 2 5 0 2 0 1
4 1 3 3 2 1 0

####################################

# ここは、read.csvか何かで書きなおして下さい。
num <- c(
1234543211,
1234512312,
2262412124,
1235232344)

# 1番目の引数の十進数(桁数は2番目の2番目の引数)を数値列に分解
dec2one <- function(num,digit=0){
if(num <= 0 && digit <= 0){
return(NULL)
}else{
return(append(Recall(num%/%10,digit-1),num%%10))
}}

# 1番目の引数の羅列中の各数値を1から2番目の引数の数までカウントする
count.dec <- function(arr,max){
x <- NULL
for(i in 1:max){
x <- append(x,sum(arr==i))
}
return(x)
}

# ここからがメインルーチン
y <- NULL
for(i in 1:length(num)){
arr <- dec2one(num[i],10)
y <- rbind(y,count.dec(arr,6))
}

(y <- data.frame(y))
    • good
    • 5
この回答へのお礼

非常にわかりやすい説明ありがとうございます。文字列にしなくても実際にできて感激しました。どのような流れで行い、何をしたかはとても理解できましたが、教えていただいた関数の式の意味がまだ消化しきれていないのでじっくり考えてみようと思います。色々と応用できそうなのでこれから勉強頑張ります。本当にありがとうございました。

お礼日時:2017/11/25 08:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!