次の問題が発生します。1つには、名前ごとにa、b、c、d、eの5つのカテゴリを持つデータフレームが与えられます(名前は54です)。トピックについての感触を与えるために、Rのデータフレーム全体からの小さな抜粋を示します。
**a b c d e
Teniers 15 12 13 6 G
Van Dyck 15 10 17 13 G
Bourdon 10 8 8 4 H
Le Brun 16 16 8 16 H
Le Suer 15 15 4 15 H
Poussin 15 17 6 15 H**
「sort」機能で名前をアルファベット順に並べることに成功し、名前の列がアルファベット順に並べられるだけでなく、それぞれの名前に属する5つのカテゴリも移動しました。これまでのところ、とても良いですが、タスクは、各名前から最初の文字を取得し、最初の文字が最も頻繁に表示される名前のみを選択することです。「strsplit」関数を使用して最初の文字を取得すると、最初の文字が各行に表示されますが、左側にはどこにでも留まります[1]「最初の文字」、新しい行[1]「別の最初の文字」、新しいrow1[...]54日まで。データフレーム内の位置ではありません。
それで、何かアイデアはありますか?
これがコードからの抜粋です...
library(MASS)
data(painters)
attach(painters)
painters
str(painters)
summary(painters)
y <- as.vector(rownames(painters))
is.vector(y)
sortnames <- painters[order(y) , ]
as.data.frame( painters[order(y) , ] ) ##sorted in list; each name with ist relevant criteria
rownames(sortnames)
z <- rownames(sortnames)
str(z)
is.vector(z)
strsplit(z, "")
as.list(strsplit(z, ""))
liste <- as.list(strsplit(z, ""))
matrix <- as.matrix(liste)
matrix
matrix[,1]
matrix[1,]
matrix[1,1]
matrix[[1]] [1]
first <- matrix (as.matrix(liste))
for(i in 1:54) {print( matrix[[i]][1]) }
str(first)
よろしくお願いいたします。
編集
私が必要なのは:
「rownames」列の各名前の最初の文字のみを含むベクトル(またはdimension [54,1]の行列)を作成するには、その各行は、データ内の並べ替えられたベクトルの行番号である必要があります。フレーム。表示されているデータフレーム内の位置を維持します。
例えば
[1]"A"
[2]"B"
[3]"B"
[4]"C"
....
言い換えると、行名の最初の文字だけでベクトル/行列を抽出する必要があります(データフレームでは、「行名」は画家の名前のみとして定義されているため、6の最初の列;))
私はあなたの助けに感謝します。
substr(data, 1, 1)
私はそれらをそのように手に入れました:
firstletter <- substr(rownames(sortnames), 1, 1)
firstletter <- as.data.frame(firstletter) **##how should I define "firstletter" for later use??**
firstletter
1 A
2 B
3 B
4 B
5 B
6 C
7 C
8 C
9 D
10 D
11 D
12 D
13 D
14 D
15 D
16 F
17 F
18 F
19 G
20 G
21 G
22 H
23 J
24 J
25 L
26 L
27 L
28 L
29 M
30 M
31 O
32 P
33 P
34 P
35 P
36 P
37 P
38 P
39 P
40 P
41 R
42 R
43 R
44 T
45 T
46 T
47 T
48 T
49 T
50 V
51 V
52 V
53 V
54 V
魅力のように働いた。画家の名前の最初の文字が抽出され、行番号はそのまま残ります。
だから、どうもありがとう!
ps最後の質問だけですが、この「最初の文字」[vector / matrix / list / data.frame]を取得できる関数またはコマンドは、その構造をどのように定義するかによって異なります(ここでの最良の決定は何ですか?)後で使用するために)そして、vector / matrix / listで最も頻繁に現れる3つの最初の文字をチェックし、それらだけを抽出しますか?またはそれは複雑すぎるでしょうか?
編集:必要なのは、substract(rbindコマンド)の後に特定のマトリックスから冗長な最後の行を削除することだけです
firstletter Composition Drawing Colour Expression School
Da Udine "D" "10" " 8" "16" " 3" "A"
Del Piombo "D" " 8" "13" "16" " 7" "A"
Diepenbeck "D" "11" "10" "14" " 6" "G"
Palma Giovane "P" "12" " 9" "14" " 6" "D"
Palma Vecchio "P" " 5" " 6" "16" " 0" "D"
Pordenone "P" " 8" "14" "17" " 5" "D"
Teniers "T" "15" "12" "13" " 6" "G"
The Carraci "T" "15" "17" "13" "13" "E"
Tintoretto "T" "15" "14" "16" " 4" "D"
Titian "T" "12" "15" "18" " 6" "D"
Da Vinci "D" "15" "16" " 4" "14" "A"
Domenichino "D" "15" "17" " 9" "17" "E"
Poussin "P" "15" "17" " 6" "15" "H"
The Carraci1 "T" "15" "17" "13" "13" "E"
長い間グーグルしてきましたが、今まで機能がありませんでした。
助言がありますか?