Rでコマンド:よく使うclassの作成方法と操作例の紹介

Rの解析に役に立つ記事
スポンサーリンク

Rで解析する際によく使用しているclassの作成方法と操作例の紹介です。基本的なコマンドです。とりあえず、日常的な使用範囲のコマンド例です。

実行コマンドはwindows 7およびOS X 10.11.2のR version 3.2.3で確認しています。


スポンサーリンク

vector classの例

同じ型の要素を1次元に並べたものです。基本となるclassです。

###作成コマンド#####
#規則的なベクトル:seqコマンド
#例えば1から10まで2の公差
seq(1, 10, by = 2)
[1] 1 3 5 7 9

#繰り返しのあるベクトル:repコマンド
#例えば長さが10で1から5を繰り返す
rep(1:5, length = 10)
[1] 1 2 3 4 5 1 2 3 4 5
#例えば1から2を5回繰り返す
rep(1:2, time = 5)
[1] 1 2 1 2 1 2 1 2 1 2

#名前を付与する:namesコマンド
Test <- rep(1:2, time = 5)
names(Test) <- LETTERS[1:10]
#&#30906;&#35469;
Test
A B C D E F G H I J 
1 2 1 2 1 2 1 2 1 2 

###&#25805;&#20316;&#20363;#####
#&#32080;&#21512;:c&#12467;&#12510;&#12531;&#12489;
c(seq(1, 10, by = 2), rep(1:2, time = 5))
[1] 1 3 5 7 9 1 2 1 2 1 2 1 2 1 2

#&#12487;&#12540;&#12479;&#12398;&#21462;&#12426;&#20986;&#12375;:[ ]&#12391;&#25351;&#23450;
#&#20363;&#12360;&#12400;3&#30058;&#30446;&#12434;&#21462;&#12426;&#20986;&#12377;
Test <- seq(1, 10, by = 2)
Test[3]
[1] 5
#&#20363;&#12360;&#12400;&#12521;&#12505;&#12523;&#12391;&#12418;&#21487;&#33021;
Test <- rep(1:2, time = 5)
names(Test) <- LETTERS[1:10]
Test["E"]
E 
1 

#&#26465;&#20214;&#12395;&#21512;&#12358;&#35201;&#32032;&#12398;&#20301;&#32622;&#12392;&#20516;&#12434;&#21462;&#24471;:which&#12467;&#12510;&#12531;&#12489;
#&#20363;&#12360;&#12400;4&#12398;&#20493;&#25968;&#12398;&#20301;&#32622;
Test <- print(sample(40:50, size = 20, replace = TRUE))
[1] 50 50 50 48 44 47 50 44 46 45 49 48 45 40 48 49 40 48 44 49
which(Test %% 4 == 0)
[1]  4  5  8 12 14 15 17 18 19
#&#20363;&#12360;&#12400;4&#12398;&#20493;&#25968;&#12398;&#20516;
Test[which(Test %% 4 == 0)]
[1] 48 44 44 48 40 48 40 48 44

#&#38263;&#12373;&#12434;&#21462;&#24471;:length&#12467;&#12510;&#12531;&#12489;
length(rep(1:2, time = 5))
[1] 10

#&#38918;&#24207;&#12434;&#36870;&#36578;&#12377;&#12427;:rev&#12467;&#12510;&#12531;&#12489;
rev(1:10)
[1] 10  9  8  7  6  5  4  3  2  1

#&#37325;&#35079;&#12377;&#12427;&#20516;&#12434;&#21462;&#12426;&#38500;&#12367;:unique&#12467;&#12510;&#12531;&#12489;
unique(rep(1,10))
[1] 1

matrix classの例

行列で2次元の情報を持つベクトルです。

###&#20316;&#25104;&#12467;&#12510;&#12531;&#12489;#####
#&#20363;&#12360;&#12400;5*5&#12398;&#22823;&#12365;&#12373;&#12434;&#20316;&#25104;
matrix(1:25, nrow = 5,  ncol = 5)
[,1] [,2] [,3] [,4] [,5]
[1,]    1    6   11   16   21
[2,]    2    7   12   17   22
[3,]    3    8   13   18   23
[4,]    4    9   14   19   24
[5,]    5   10   15   20   25
#&#20363;&#12360;&#12400;&#21517;&#21069;&#12434;&#20184;&#19982;&#12375;&#12390;&#20316;&#25104;
#list&#12391;&#25351;&#23450;&#12377;&#12427;&#12398;&#12364;&#12509;&#12452;&#12531;&#12488;
matrix(1:25, nrow = 5,  ncol = 5,
       dimnames = list(letters[1:5], LETTERS[1:5]))
A  B  C  D  E
a 1  6 11 16 21
b 2  7 12 17 22
c 3  8 13 18 23
d 4  9 14 19 24
e 5 10 15 20 25

#&#20363;&#12360;&#12400;&#20516;&#12364;0&#12391;5*5&#12398;&#22823;&#12365;&#12373;&#12434;&#20316;&#25104;:mat.or.vec&#12467;&#12510;&#12531;&#12489;
mat.or.vec(5, 5)
[,1] [,2] [,3] [,4] [,5]
[1,]    0    0    0    0    0
[2,]    0    0    0    0    0
[3,]    0    0    0    0    0
[4,]    0    0    0    0    0
[5,]    0    0    0    0    0

###&#25805;&#20316;&#20363;#####
#&#32080;&#21512;&#12377;&#12427;:rbind,cbind
#&#20363;&#12360;&#12400;rbind
rbind(mat.or.vec(2, 2), mat.or.vec(2, 2))
[,1] [,2]
[1,]    0    0
[2,]    0    0
[3,]    0    0
[4,]    0    0

#&#12487;&#12540;&#12479;&#12398;&#21462;&#12426;&#20986;&#12375;:[ , ]&#12391;&#25351;&#23450;
Test <- print(matrix(1:9, 3, 3))
[,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
#&#21462;&#12426;&#20986;&#12375;
Test[2, 2]
[1] 5

#&#36578;&#32622;&#34892;&#21015;:t&#12467;&#12510;&#12531;&#12489;
t(Test)
[,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9

#&#23550;&#35282;&#34892;&#21015;:diag&#12467;&#12510;&#12531;&#12489;
diag(1, 3, 3)
[,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    1    0
[3,]    0    0    1

#&#23550;&#35282;&#12424;&#12426;&#19978;&#37096;,&#19979;&#37096;&#12434;&#32622;&#25563;&#12377;&#12427;:upper.tri,lower.tri&#12467;&#12510;&#12531;&#12489;
Test <- print(mat.or.vec(3, 3))
[,1] [,2] [,3]
[1,]    0    0    0
[2,]    0    0    0
[3,]    0    0    0
#&#19978;&#37096;&#12434;1&#12391;&#32622;&#25563;
Test[upper.tri(Test)] <- 1
[,1] [,2] [,3]
[1,]    0    1    1
[2,]    0    0    1
[3,]    0    0    0
#&#23550;&#35282;&#12434;&#21547;&#12417;&#12390;&#19979;&#37096;&#12434;2&#12391;&#32622;&#25563;
Test[lower.tri(Test, diag = TRUE)] <- 2
[,1] [,2] [,3]
[1,]    2    1    1
[2,]    2    2    1
[3,]    2    2    2

data.frame classの例

行列の2次元情報を持ちますが、データの型は異なっていても格納することができます。ただし、データの長さは同じでなければなりません。

###&#20316;&#25104;&#12467;&#12510;&#12531;&#12489;#####
n <- 100
TestData <- data.frame(Group = sample(paste0("Group", 1:5),
                                      size = n, replace = TRUE),
                       Data1 = sample(c(1:5, NA), size = n, replace = TRUE),
                       Data2 = 1:n)
#&#12487;&#12540;&#12479;&#27083;&#36896;&#12434;&#30906;&#35469;
#&#25991;&#23383;&#21015;&#12399;factor class&#12395;&#12394;&#12426;&#12414;&#12377;
str(TestData)
'data.frame':	100 obs. of  3 variables:
  $ Group: Factor w/ 5 levels "Group1","Group2",..: 3 1 2 1 1 4 2 2 3 2 ...
$ Data1: int  NA 2 NA 2 1 NA 1 5 5 2 ...
$ Data2: int  1 2 3 4 5 6 7 8 9 10 ...

#&#25991;&#23383;&#21015;&#12434;factor class&#12395;&#12375;&#12394;&#12356;:I&#12467;&#12510;&#12531;&#12489;
ITestData <- data.frame(Group = I(sample(paste0("Group", 1:5),
                                         size = n, replace = TRUE)),
                        Data1 = sample(c(1:5, NA), size = n, replace = TRUE),
                        Data2 = 1:n)
#&#12487;&#12540;&#12479;&#27083;&#36896;&#12434;&#30906;&#35469;
str(ITestData)
'data.frame':	100 obs. of  3 variables:
  $ Group:Class 'AsIs'  chr [1:100] "Group3" "Group2" "Group2" "Group4" ...
$ Data1: int  5 4 1 NA 1 NA 3 4 2 2 ...
$ Data2: int  1 2 3 4 5 6 7 8 9 10 ...

#&#12487;&#12540;&#12479;&#25968;&#12364;&#30064;&#12394;&#12427;&#12392;&#12456;&#12521;&#12540;&#12395;&#12394;&#12426;&#12414;&#12377;
data.frame(Data1 = 1:5,
           Data2 = 1:2)
data.frame(Data1 = 1:5, Data2 = 1:2) &#12391;&#12456;&#12521;&#12540;: 
&#24341;&#25968;&#12395;&#30064;&#12394;&#12427;&#21015;&#25968;&#12398;&#12487;&#12540;&#12479;&#12501;&#12524;&#12540;&#12512;&#12364;&#21547;&#12414;&#12428;&#12390;&#12356;&#12414;&#12377;: 5, 2

###&#25805;&#20316;&#20363;#####
#&#12487;&#12540;&#12479;&#20808;&#38957;&#37096;&#20998;&#12434;&#34920;&#31034;:head&#12467;&#12510;&#12531;&#12489;
head(TestData)
Group Data1 Data2
1 Group3    NA     1
2 Group1     2     2
3 Group2    NA     3
4 Group1     2     4
5 Group1     1     5
6 Group4    NA     6

#&#12487;&#12540;&#12479;&#20808;&#38957;&#37096;&#20998;&#12434;&#34920;&#31034;:tail&#12467;&#12510;&#12531;&#12489;
tail(TestData)
Group Data1 Data2
95  Group2     1    95
96  Group1     1    96
97  Group2     5    97
98  Group5     5    98
99  Group3     2    99
100 Group5     1   100

#&#12487;&#12540;&#12479;&#12398;&#35201;&#32004;:summary&#12467;&#12510;&#12531;&#12489;
summary(TestData)
Group        Data1           Data2       
Group1:16   Min.   :1.000   Min.   :  1.00  
Group2:28   1st Qu.:2.000   1st Qu.: 25.75  
Group3:20   Median :3.000   Median : 50.50  
Group4:16   Mean   :3.106   Mean   : 50.50  
Group5:20   3rd Qu.:4.000   3rd Qu.: 75.25  
Max.   :5.000   Max.   :100.00  
NA's   :15

#&#27424;&#25613;&#20516;&#12434;&#21547;&#12414;&#12394;&#12356;Group&#12487;&#12540;&#12479;&#12434;&#34920;&#31034;:complet.cases
CompletData <- TestData[complete.cases(TestData),]
#&#35201;&#32004;
summary(CompletData)
    Group        Data1           Data2       
Group1:15   Min.   :1.000   Min.   :  2.00  
Group2:25   1st Qu.:2.000   1st Qu.: 28.00  
Group3:15   Median :3.000   Median : 51.00  
Group4:13   Mean   :3.106   Mean   : 51.52  
Group5:17   3rd Qu.:4.000   3rd Qu.: 76.00  
            Max.   :5.000   Max.   :100.00 

#&#12464;&#12523;&#12540;&#12503;&#27598;&#12395;&#38306;&#25968;&#12434;&#36969;&#29992;:aggregate&#12467;&#12510;&#12531;&#12489;
#&#12464;&#12523;&#12540;&#12503;&#12399;list&#12391;by&#12395;&#25351;&#23450;
aggregate(TestData[, 2:3], by = list(TestData[, 1]), mean, na.rm = TRUE)
  Group.1    Data1    Data2
1  Group1 2.909091 41.84000
2  Group2 3.000000 57.32143
3  Group3 2.866667 47.88889
4  Group4 3.083333 51.35714
5  Group5 2.666667 54.53333

list classの例

データの長さ及び型が異なっていても格納することができます。

#data.frameと違い長さが違うオブジェクトが個別に格納できます
list(Test1 = seq(1, 10, by = 2),
     Test2 = matrix(1:25, nrow = 5,  ncol = 5),
     Test3 = data.frame(Data1 = 1:5,
                        Data2 = 1:5))
$Test1
[1] 1 3 5 7 9
$Test2
[,1] [,2] [,3] [,4] [,5]
[1,]    1    6   11   16   21
[2,]    2    7   12   17   22
[3,]    3    8   13   18   23
[4,]    4    9   14   19   24
[5,]    5   10   15   20   25
$Test3
  Data1 Data2
1     1     1
2     2     2
3     3     3
4     4     4
5     5     5

少しでも、あなたの解析が楽になりますように!!

タイトルとURLをコピーしました