R_data
をテンプレートにして作成
開始行:
#contents
* データの扱い [#wc23f00f]
** データの入力 [#f868ff48]
*** テキストファイルから取り込む:read.table() [#g476d708]
RIGHT:21 March 2018
データフレームとして取り込まれる~
header=TRUE 1行目がカラム名として取り込まれる~
fill=TRUE 空のデータがあるとき、空欄が取り込まれる(事故...
mydf <- read.table("data.txt", header=TRUE)
mydf <- read.table("data.txt", header=TRUE, fill=TRUE)
*** 小さなデータなら直接書き込むほうが簡単 [#m9558310]
RIGHT:21 March 2018
データの部分をスプレッドシートからコピー&ペーストできる...
textConnection() を使って偽装することで実現できる
myinput <- ("
Female[tab]Copulated[tab]N
'Oregon-R'[tab]96[tab]100
'Canton-S'[tab]86[tab]100
'Hikone-R'[tab]92[tab]100
")
#
#names 属性を使ってデータに名前を付ける
names(myinput) <- "Crosses of D. melanogaster"
#
# dataframe に読み込ませる
# textConnection() を使って偽装する
mydf <- read.table(textConnection(myinput))
*** 複数のデータを書いて、一辺に取り込ませることもできる ...
RIGHT:21 March 2018
myinput1 から myinput5 までは上のように作っておく~
for 文にすれば、関数を作らなくても複数処理できる~
for 文の中では表示されないものが出てくるので、show での対...
myinputall <- c(
myinput1,
myinput2,
myinput3,
myinput4,
myinput5
)
#
mydataset <- length(myinputall)
#
for(i in 1:mydataset) {
mydf <- read.table(textConnection(myinputall[i]),
header=TRUE,
row.names=1)
#
# ココにそれぞれの処理
cat("\n----------------------------------------------...
names(myinputall[i]),
"\n\n")
#
}
** 重み付けデータの扱い [#n65b28bf]
RIGHT:21 March 2018
重み付けデータはRでは扱いづらい(しかし、データの取り方が...
そこで、個々のデータの形に集計し直す
survival analysis のデータはこのままでいいのだけど~
プログラム引用:R numericとfactorの相互変換 https://sigun...
ある時間に対してイベントが起きた個体数を記録したデータ~
> weightdata.txt
Time Data1 Data2 Data3 ... Data11
1 6 4 5 7
2 1 1 0 1
...
各個体がそのイベントが起きたデータを持つという形に変換する
mydf <- read.table("weightdata.txt", header=TRUE)
#
# matrix に変換
mymat <- data.matrix(mydf)
#
# 頻度データを個々のデータに変換する
mydf2 <-
cbind(
#
# 数値データの数だけ、名前(交配)を並べる
data.frame(c(
rep(colnames(mymat)[2], sum(mymat[,c(2)])),
rep(colnames(mymat)[3], sum(mymat[,c(3)])),
rep(colnames(mymat)[4], sum(mymat[,c(4)])),
rep(colnames(mymat)[5], sum(mymat[,c(5)])),
rep(colnames(mymat)[6], sum(mymat[,c(6)])),
rep(colnames(mymat)[7], sum(mymat[,c(7)])),
rep(colnames(mymat)[8], sum(mymat[,c(8)])),
rep(colnames(mymat)[9], sum(mymat[,c(9)])),
rep(colnames(mymat)[10], sum(mymat[,c(10)])),
rep(colnames(mymat)[11], sum(mymat[,c(11)]))
)),
#
# 数値データを作成
# 頻度の回数だけ反復する
#
# 単純に dataframe にすると
# なぜか数値データもファクター扱いになってしまう
# そこで、数値に変換してから data.frame に変換する
# https://siguniang.wordpress.com/2010/09/30/rnumer...
# as.numeric(as.character(size))
#
data.frame(as.numeric(
c(
rep(mymat[,1], mymat[,c(2)]),
rep(mymat[,1], mymat[,c(3)]),
rep(mymat[,1], mymat[,c(4)]),
rep(mymat[,1], mymat[,c(5)]),
rep(mymat[,1], mymat[,c(6)]),
rep(mymat[,1], mymat[,c(7)]),
rep(mymat[,1], mymat[,c(8)]),
rep(mymat[,1], mymat[,c(9)]),
rep(mymat[,1], mymat[,c(10)]),
rep(mymat[,1], mymat[,c(11)])
)
) )
)
結果
> mydf2
[長い名前] [長い名前]
1 Data1 1
2 Data1 1
...
6 Data1 1
7 Data1 2
...
カラム名が変換操作をした履歴を示す「長い変な名前」になっ...
そこで、変換しておかないとニンゲンが理解できなくなる
> names(mydf2) <- c("cross","time")
> mydf2
Cross time
1 Data1 1
2 Data1 1
...
6 Data1 1
7 Data1 2
...
** データの操作 [#ee33cc27]
*** 行列の特定の数を置換 [#n1143f02]
RIGHT:23November2013
xという名前の行列の要素のうち、0のものを-1に置換
x[(x==0)]<- -1
*** ifelse関数 [#ta84d18a]
RIGHT:18 July 2019
if と else を使ったものより簡単な判断に使える~
返り値が複雑なものはややこしいことになるので、複雑なこと...
普通に if(){} elsif(){} else{} を使うべし
ifelse(判断(TRUE か FALSE が返るもの), TRUEのときの返...
ifelse(mydfboth$Court1<mydfboth$Court2,"Male1","Male2")
# offset を調整する
off = -(mymatrix[1,] + mymatrix[2,])
*** describeBy() : カテゴリ毎の記述統計を出力する [#w92d4...
RIGHT:20 July 2019
library(psych)
describeBy(mydf,mydfboth$Cross)
*** 転置: t() [#h3d68b2d]
RIGHT:20 July 2019
行列の縦横を転置する
t(mymatrix)
t(mydf)
// *** [#t23bafa7]
// RIGHT:20 July 2019
//
// hsdtestout <- HSD.test(model, "EDnum")
//
// mytestnum <- length(hsdtestout$group[[2]])
// # HSD.test の結果の行数
//
// for(k in 1:mytestnum){
//
//
// # これまでの判断で、必ずアルファベット...
// # NULL のときがあるようなので、NULL な...
// # なるようにしておく
// myhsdtestlabel1 =
// as.character(hsdtestout$group[,2][...
// # ifelse(
// # is.null(levels(hsdtestout$gro...
// # "",
// # levels(hsdtestout$group[k,3])
// # )
*** names 属性を使ってデータに名前を付ける:names() [#a9d...
RIGHT:21 March 2018
dataframe ではなくても可
names(mydf) <- "Crosses with D. melanogaster males "
*** カラム名を変更:names() [#o0f1a07a]
RIGHT:21 March 2018
dataframe ではなくても可~
全部変更(または名付け)
names(mydf2) <- c("cross", "time")
** dataframe の操作 [#oace8ba3]
*** dataframe の全てのデータに代入 [#mc19cb5b]
RIGHT:21 March 2018
mydf$Order <- 0
ここで、全データに同じ値を代入しようとして mydf <- 0 と...
R は自動で型変換をするので、この場合は、各データに代入さ...
同じ名前で dataframe から数値(integer)になってしまうと...
> mydf <- 0
> mydf
[1] 0
*** dataframe に条件に一致するものだけに代入する(置換) ...
RIGHT:21 March 2018
mydf[mydf<0] <- NA
mydf2[mydf2==0] <- NA
*** dataframe に条件に一致するものだけに代入する(置換) ...
RIGHT:23 March 2018
factor(ここでは MyFactor)が、Mylist のいずれかと一致す...
for loop を使わずに1行でできてしまう ← すごい~
文字列が一致のときは、match が integer の 1 を返す~
文字列が不一致のときは、match が integer の NA を返す~
NA は FALSE の代りにはならないので、is.na() を利用~
mydf$Cat1[is.na(match(mydf$MyFactor, Mylist))==FALSE] <- 0
*** dataframe から条件に一致するものだけ取り出す [#u6fd86...
RIGHT:23 March 2018
mydf の Factor1 と同じものを、Factor2 に持つ mydf2 のデー...
mydf$Factor1 の代わりに上のように Mylist にもできるはず~
FALSE の後の コンマ は必須~
一致の判断は上述~
mydf22 <- mydf2[!is.na(match(mydf2$Factor2, mydf$Factor1...
mydf22 <- mydf2[is.na(match(mydf2$Factor2, mydf$Factor1)...
mydf22 <- mydf2$Cat1[!is.na(match(mydf2$Factor2, mydf$Fa...
*** dataframe から条件に一致するものだけ取り出す [#ea82d2...
RIGHT:25 March 2018
条件は & や | を使ってふたつ以上の使える
mydf$Cat1[mydf$Cat1 > 0] # あるカラムについて正の値のみ...
mydf$Cat2[mydf$Cat1 > 0] # あるカラムについて正の値の場...
mydf$Cat2[!(mydf$Cat1 > 0)] # あるカラムについて正ではな...
mydf$Cat3[!(mydf$Cat1 > 0) & (mydf$Cat2 > 0)] # Cat1 が0...
mydf$Cat3[!(mydf$Cat1 > 0) | (mydf$Cat2 > 0)] # Cat1 が0...
*** dataframe から条件に一致するものだけ取り出す:subset(...
RIGHT:21 March 2018
mydf2 <- subset(mydf, Order>0)
*** dataframe から条件に一致するものだけ取り出す:subset(...
*** as.matrix(): dataframe を matrix に変換 [#zf9b948e]
RIGHT:21 March 2018
subset= で行の抽出条件 ← Observed > 5 のデータの行を取り...
select= で列の抽出条件、取り出し順序の変更もできる~
as.matrix(): dataframe を matrix に変換
mydata <- as.matrix(subset(
mydf,
subset=Observed>5,
select=c(Courtship, Observed)
)
)
*** dataframe の factor を文字列として取り出す:as.charac...
RIGHT:21 March 2018
これは for文の中の一部分のコードで i や j を使っての操作
mychar1 <- as.character(mydf1$factor1[i])
mychar2 <- as.character(mydf2$factor2[j])
*** dataframe から条件に一致する factor を文字列リストと...
RIGHT:23 March 2018
Cat1 が 0 である factor(Myfactor)の取り出し
mycharlist <- as.character(mydf$Myfactor[mydf$Cat1==0])
*** dataframe にデータを加える(横):cbind() [#id9fd35d]
RIGHT:21 March 2018
ここでは演算していますが、別な dataframe を右に付けること...
サイズは一致していないとヘンなことになるので注意が必要
mydf <- cbind(mydf, mydf$N-mydf$Copulated)
*** dataframe にデータを加える(下):rbind() [#m57d5548]
RIGHT:21 March 2018
カラム名が一致しないと上手くいかない
mydf <- rbind( mydf, data.frame(columnname1="Dummy", col...
*** dataframe からカラムを取り出し、結合する:cbind() [#l...
RIGHT:21 March 2018
mydf3 <- cbind(mydf2[,3:4], mydf2[,6:10])
*** カラム名を変更:names() [#l8b39ac3]
RIGHT:21 March 2018
全部変更(または名付け)
names(mydf2) <- c("cross","time")
*** カラム名を変更:names()[] [#i35f7692]
RIGHT:21 March 2018
何番目のカラムかを意識しないといけません
names(mydf)[3] <- "NotC"
*** 空の因子レベルを取り除く:droplevels() [#a8afd7a5]
RIGHT:21 March 2018
操作した dataframe には、
元の dataframe の因子の情報(因子レベル)が含まれている~
そこで、空の因子レベルを取り除かないと正しく検定できなく...
RWiki 因子Tips大全: http://www.okadajp.org/RWiki/?因子Ti...
mydf2$Factor1 <- droplevels(mydf2$Factor1)
*** dataframe を表示させる:show() [#o4144613]
RIGHT:21 March 2018
for 文の中では表示されないので、show() で対応する~
http://d.hatena.ne.jp/yusap/20130514/1368486988 ヘのコメ...
show(
mydf
)
*** dataframe の行数のカウント:nrow() [#x979fc62]
RIGHT:21 March 2018
x <- nrow(mydf)
***データの扱いについてのメモ [#o15a1bfb]
RIGHT:11 July 2011
mytabledf <- data.frame(summary(myfit)$table)
とすると、myfit の出力テーブルがデータフレームになる。
str(mytabledf)で何が含まれているか分かる(records, n.max,...
そこで、例えば、
mytabledf$median
で、(Kaplan-Meier estimate の)median だけが出てくる。
|Today:&counter(today); |Yesterday:&counter(yesterday); |...
終了行:
#contents
* データの扱い [#wc23f00f]
** データの入力 [#f868ff48]
*** テキストファイルから取り込む:read.table() [#g476d708]
RIGHT:21 March 2018
データフレームとして取り込まれる~
header=TRUE 1行目がカラム名として取り込まれる~
fill=TRUE 空のデータがあるとき、空欄が取り込まれる(事故...
mydf <- read.table("data.txt", header=TRUE)
mydf <- read.table("data.txt", header=TRUE, fill=TRUE)
*** 小さなデータなら直接書き込むほうが簡単 [#m9558310]
RIGHT:21 March 2018
データの部分をスプレッドシートからコピー&ペーストできる...
textConnection() を使って偽装することで実現できる
myinput <- ("
Female[tab]Copulated[tab]N
'Oregon-R'[tab]96[tab]100
'Canton-S'[tab]86[tab]100
'Hikone-R'[tab]92[tab]100
")
#
#names 属性を使ってデータに名前を付ける
names(myinput) <- "Crosses of D. melanogaster"
#
# dataframe に読み込ませる
# textConnection() を使って偽装する
mydf <- read.table(textConnection(myinput))
*** 複数のデータを書いて、一辺に取り込ませることもできる ...
RIGHT:21 March 2018
myinput1 から myinput5 までは上のように作っておく~
for 文にすれば、関数を作らなくても複数処理できる~
for 文の中では表示されないものが出てくるので、show での対...
myinputall <- c(
myinput1,
myinput2,
myinput3,
myinput4,
myinput5
)
#
mydataset <- length(myinputall)
#
for(i in 1:mydataset) {
mydf <- read.table(textConnection(myinputall[i]),
header=TRUE,
row.names=1)
#
# ココにそれぞれの処理
cat("\n----------------------------------------------...
names(myinputall[i]),
"\n\n")
#
}
** 重み付けデータの扱い [#n65b28bf]
RIGHT:21 March 2018
重み付けデータはRでは扱いづらい(しかし、データの取り方が...
そこで、個々のデータの形に集計し直す
survival analysis のデータはこのままでいいのだけど~
プログラム引用:R numericとfactorの相互変換 https://sigun...
ある時間に対してイベントが起きた個体数を記録したデータ~
> weightdata.txt
Time Data1 Data2 Data3 ... Data11
1 6 4 5 7
2 1 1 0 1
...
各個体がそのイベントが起きたデータを持つという形に変換する
mydf <- read.table("weightdata.txt", header=TRUE)
#
# matrix に変換
mymat <- data.matrix(mydf)
#
# 頻度データを個々のデータに変換する
mydf2 <-
cbind(
#
# 数値データの数だけ、名前(交配)を並べる
data.frame(c(
rep(colnames(mymat)[2], sum(mymat[,c(2)])),
rep(colnames(mymat)[3], sum(mymat[,c(3)])),
rep(colnames(mymat)[4], sum(mymat[,c(4)])),
rep(colnames(mymat)[5], sum(mymat[,c(5)])),
rep(colnames(mymat)[6], sum(mymat[,c(6)])),
rep(colnames(mymat)[7], sum(mymat[,c(7)])),
rep(colnames(mymat)[8], sum(mymat[,c(8)])),
rep(colnames(mymat)[9], sum(mymat[,c(9)])),
rep(colnames(mymat)[10], sum(mymat[,c(10)])),
rep(colnames(mymat)[11], sum(mymat[,c(11)]))
)),
#
# 数値データを作成
# 頻度の回数だけ反復する
#
# 単純に dataframe にすると
# なぜか数値データもファクター扱いになってしまう
# そこで、数値に変換してから data.frame に変換する
# https://siguniang.wordpress.com/2010/09/30/rnumer...
# as.numeric(as.character(size))
#
data.frame(as.numeric(
c(
rep(mymat[,1], mymat[,c(2)]),
rep(mymat[,1], mymat[,c(3)]),
rep(mymat[,1], mymat[,c(4)]),
rep(mymat[,1], mymat[,c(5)]),
rep(mymat[,1], mymat[,c(6)]),
rep(mymat[,1], mymat[,c(7)]),
rep(mymat[,1], mymat[,c(8)]),
rep(mymat[,1], mymat[,c(9)]),
rep(mymat[,1], mymat[,c(10)]),
rep(mymat[,1], mymat[,c(11)])
)
) )
)
結果
> mydf2
[長い名前] [長い名前]
1 Data1 1
2 Data1 1
...
6 Data1 1
7 Data1 2
...
カラム名が変換操作をした履歴を示す「長い変な名前」になっ...
そこで、変換しておかないとニンゲンが理解できなくなる
> names(mydf2) <- c("cross","time")
> mydf2
Cross time
1 Data1 1
2 Data1 1
...
6 Data1 1
7 Data1 2
...
** データの操作 [#ee33cc27]
*** 行列の特定の数を置換 [#n1143f02]
RIGHT:23November2013
xという名前の行列の要素のうち、0のものを-1に置換
x[(x==0)]<- -1
*** ifelse関数 [#ta84d18a]
RIGHT:18 July 2019
if と else を使ったものより簡単な判断に使える~
返り値が複雑なものはややこしいことになるので、複雑なこと...
普通に if(){} elsif(){} else{} を使うべし
ifelse(判断(TRUE か FALSE が返るもの), TRUEのときの返...
ifelse(mydfboth$Court1<mydfboth$Court2,"Male1","Male2")
# offset を調整する
off = -(mymatrix[1,] + mymatrix[2,])
*** describeBy() : カテゴリ毎の記述統計を出力する [#w92d4...
RIGHT:20 July 2019
library(psych)
describeBy(mydf,mydfboth$Cross)
*** 転置: t() [#h3d68b2d]
RIGHT:20 July 2019
行列の縦横を転置する
t(mymatrix)
t(mydf)
// *** [#t23bafa7]
// RIGHT:20 July 2019
//
// hsdtestout <- HSD.test(model, "EDnum")
//
// mytestnum <- length(hsdtestout$group[[2]])
// # HSD.test の結果の行数
//
// for(k in 1:mytestnum){
//
//
// # これまでの判断で、必ずアルファベット...
// # NULL のときがあるようなので、NULL な...
// # なるようにしておく
// myhsdtestlabel1 =
// as.character(hsdtestout$group[,2][...
// # ifelse(
// # is.null(levels(hsdtestout$gro...
// # "",
// # levels(hsdtestout$group[k,3])
// # )
*** names 属性を使ってデータに名前を付ける:names() [#a9d...
RIGHT:21 March 2018
dataframe ではなくても可
names(mydf) <- "Crosses with D. melanogaster males "
*** カラム名を変更:names() [#o0f1a07a]
RIGHT:21 March 2018
dataframe ではなくても可~
全部変更(または名付け)
names(mydf2) <- c("cross", "time")
** dataframe の操作 [#oace8ba3]
*** dataframe の全てのデータに代入 [#mc19cb5b]
RIGHT:21 March 2018
mydf$Order <- 0
ここで、全データに同じ値を代入しようとして mydf <- 0 と...
R は自動で型変換をするので、この場合は、各データに代入さ...
同じ名前で dataframe から数値(integer)になってしまうと...
> mydf <- 0
> mydf
[1] 0
*** dataframe に条件に一致するものだけに代入する(置換) ...
RIGHT:21 March 2018
mydf[mydf<0] <- NA
mydf2[mydf2==0] <- NA
*** dataframe に条件に一致するものだけに代入する(置換) ...
RIGHT:23 March 2018
factor(ここでは MyFactor)が、Mylist のいずれかと一致す...
for loop を使わずに1行でできてしまう ← すごい~
文字列が一致のときは、match が integer の 1 を返す~
文字列が不一致のときは、match が integer の NA を返す~
NA は FALSE の代りにはならないので、is.na() を利用~
mydf$Cat1[is.na(match(mydf$MyFactor, Mylist))==FALSE] <- 0
*** dataframe から条件に一致するものだけ取り出す [#u6fd86...
RIGHT:23 March 2018
mydf の Factor1 と同じものを、Factor2 に持つ mydf2 のデー...
mydf$Factor1 の代わりに上のように Mylist にもできるはず~
FALSE の後の コンマ は必須~
一致の判断は上述~
mydf22 <- mydf2[!is.na(match(mydf2$Factor2, mydf$Factor1...
mydf22 <- mydf2[is.na(match(mydf2$Factor2, mydf$Factor1)...
mydf22 <- mydf2$Cat1[!is.na(match(mydf2$Factor2, mydf$Fa...
*** dataframe から条件に一致するものだけ取り出す [#ea82d2...
RIGHT:25 March 2018
条件は & や | を使ってふたつ以上の使える
mydf$Cat1[mydf$Cat1 > 0] # あるカラムについて正の値のみ...
mydf$Cat2[mydf$Cat1 > 0] # あるカラムについて正の値の場...
mydf$Cat2[!(mydf$Cat1 > 0)] # あるカラムについて正ではな...
mydf$Cat3[!(mydf$Cat1 > 0) & (mydf$Cat2 > 0)] # Cat1 が0...
mydf$Cat3[!(mydf$Cat1 > 0) | (mydf$Cat2 > 0)] # Cat1 が0...
*** dataframe から条件に一致するものだけ取り出す:subset(...
RIGHT:21 March 2018
mydf2 <- subset(mydf, Order>0)
*** dataframe から条件に一致するものだけ取り出す:subset(...
*** as.matrix(): dataframe を matrix に変換 [#zf9b948e]
RIGHT:21 March 2018
subset= で行の抽出条件 ← Observed > 5 のデータの行を取り...
select= で列の抽出条件、取り出し順序の変更もできる~
as.matrix(): dataframe を matrix に変換
mydata <- as.matrix(subset(
mydf,
subset=Observed>5,
select=c(Courtship, Observed)
)
)
*** dataframe の factor を文字列として取り出す:as.charac...
RIGHT:21 March 2018
これは for文の中の一部分のコードで i や j を使っての操作
mychar1 <- as.character(mydf1$factor1[i])
mychar2 <- as.character(mydf2$factor2[j])
*** dataframe から条件に一致する factor を文字列リストと...
RIGHT:23 March 2018
Cat1 が 0 である factor(Myfactor)の取り出し
mycharlist <- as.character(mydf$Myfactor[mydf$Cat1==0])
*** dataframe にデータを加える(横):cbind() [#id9fd35d]
RIGHT:21 March 2018
ここでは演算していますが、別な dataframe を右に付けること...
サイズは一致していないとヘンなことになるので注意が必要
mydf <- cbind(mydf, mydf$N-mydf$Copulated)
*** dataframe にデータを加える(下):rbind() [#m57d5548]
RIGHT:21 March 2018
カラム名が一致しないと上手くいかない
mydf <- rbind( mydf, data.frame(columnname1="Dummy", col...
*** dataframe からカラムを取り出し、結合する:cbind() [#l...
RIGHT:21 March 2018
mydf3 <- cbind(mydf2[,3:4], mydf2[,6:10])
*** カラム名を変更:names() [#l8b39ac3]
RIGHT:21 March 2018
全部変更(または名付け)
names(mydf2) <- c("cross","time")
*** カラム名を変更:names()[] [#i35f7692]
RIGHT:21 March 2018
何番目のカラムかを意識しないといけません
names(mydf)[3] <- "NotC"
*** 空の因子レベルを取り除く:droplevels() [#a8afd7a5]
RIGHT:21 March 2018
操作した dataframe には、
元の dataframe の因子の情報(因子レベル)が含まれている~
そこで、空の因子レベルを取り除かないと正しく検定できなく...
RWiki 因子Tips大全: http://www.okadajp.org/RWiki/?因子Ti...
mydf2$Factor1 <- droplevels(mydf2$Factor1)
*** dataframe を表示させる:show() [#o4144613]
RIGHT:21 March 2018
for 文の中では表示されないので、show() で対応する~
http://d.hatena.ne.jp/yusap/20130514/1368486988 ヘのコメ...
show(
mydf
)
*** dataframe の行数のカウント:nrow() [#x979fc62]
RIGHT:21 March 2018
x <- nrow(mydf)
***データの扱いについてのメモ [#o15a1bfb]
RIGHT:11 July 2011
mytabledf <- data.frame(summary(myfit)$table)
とすると、myfit の出力テーブルがデータフレームになる。
str(mytabledf)で何が含まれているか分かる(records, n.max,...
そこで、例えば、
mytabledf$median
で、(Kaplan-Meier estimate の)median だけが出てくる。
|Today:&counter(today); |Yesterday:&counter(yesterday); |...
ページ名: