データを結合してまとめるコマンドの紹介です。c、cbind、rbind、data.frame、listコマンドです。個人的にはデータの数や元のclassを保持しまとめることができるlistコマンドがオススメです。
classが異なるデータをまとめると、c、cbind、rbindではclassが変わってしまいます。大まかなclass優先順位は「character > numeric > integer」です。
実行コマンドはR version 4.1.2で確認しています。
実行コマンド
詳細はコメント、コマンドのヘルプを確認してください。
###データ例の作成##### #数値データの例 #実数 NumData1 <- c(0.1, 0.001, 0.0000000001) #クラスの確認 class(NumData1) [1] "numeric" #整数 IntData2 <- 1:30 #クラスの確認 class(IntData2) [1] "integer" #文字データの例 CharData <- c("か", "ら", "だ", "に", "い", "い", "も", "の") #クラスの確認 class(CharData) [1] "character" #因子データの例 FacData <- factor(CharData, levels = unique(CharData)) #クラスの確認 class(FacData) [1] "factor" ######## #cコマンドで結合 #文字列があると数字も文字列になる CTest <- c(NumData1, IntData2, CharData, FacData) #classの確認 class(CTest) [1] "character" #内容の確認 CTest [1] "0.1" "0.001" "1e-10" "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" [14] "11" "12" "13" "14" "15" "16" "17" "18" "19" "20" "21" "22" "23" [27] "24" "25" "26" "27" "28" "29" "30" "か" "ら" "だ" "に" "い" "い" [40] "も" "の" "1" "2" "3" "4" "5" "5" "6" "7" #文字列がない場合は数字が優先(numeric > integer) #因子データは因子水準になる CTest <- c(NumData1, IntData2, FacData) #classの確認 class(CTest) [1] "numeric" #内容の確認 CTest [1] 1.0e-01 1.0e-03 1.0e-10 1.0e+00 2.0e+00 3.0e+00 4.0e+00 5.0e+00 6.0e+00 7.0e+00 8.0e+00 9.0e+00 1.0e+01 [14] 1.1e+01 1.2e+01 1.3e+01 1.4e+01 1.5e+01 1.6e+01 1.7e+01 1.8e+01 1.9e+01 2.0e+01 2.1e+01 2.2e+01 2.3e+01 [27] 2.4e+01 2.5e+01 2.6e+01 2.7e+01 2.8e+01 2.9e+01 3.0e+01 1.0e+00 2.0e+00 3.0e+00 4.0e+00 5.0e+00 5.0e+00 [40] 6.0e+00 7.0e+00 #cbindで結合(rbindも結合方向が違うだけで同じ) #長さが異なるデータは一番長いデータが優先される #足りないデータは繰り返しで補完されます CBindTest <- cbind(NumData1, IntData2, CharData, FacData) Warning message: In cbind(NumData1, IntData2, CharData, FacData) : number of rows of result is not a multiple of vector length (arg 3) #classの確認 class(CBindTest) [1] "matrix" #内容の確認 CBindTest NumData1 IntData2 CharData FacData [1,] "0.1" "1" "か" "1" [2,] "0.001" "2" "ら" "2" #省略 [28,] "0.1" "28" "に" "4" [29,] "0.001" "29" "い" "5" [30,] "1e-10" "30" "い" "5" #data.frameでデータを結合 #列数が異なるとエラーで結合ができない data.frame(NumData1, IntData2, CharData, FacData) Error in data.frame(NumData1, IntData2, CharData, FacData) : 引数に異なる列数のデータフレームが含まれています: 3, 30, 8 #listで結合 #元のclassが保持されます,データ数,classが違っても大丈夫 ListTest <- list(NumData1, IntData2, CharData, FacData) #classの確認 class(ListTest) #構造の確認 str(ListTest) List of 4 $ : num [1:3] 1e-01 1e-03 1e-10 $ : int [1:30] 1 2 3 4 5 6 7 8 9 10 ... $ : chr [1:8] "か" "ら" "だ" "に" ... $ : Factor w/ 7 levels "か","ら","だ",..: 1 2 3 4 5 5 6 7 #listの連結:cコマンドを使います ListTest2 <- list("karada-good.net") c(ListTest, ListTest2) [[1]] [1] 1e-01 1e-03 1e-10 [[2]] [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [[3]] [1] "か" "ら" "だ" "に" "い" "い" "も" "の" [[4]] [1] か ら だ に い い も の Levels: か ら だ に い も の [[5]] [1] "karada-good.net" #参考:listのデータを取り出す #[[]]で指定するとオリジナルのデータが取り出せます GetData <- ListTest[[3]] class(GetData) [1] "character" GetData [1] "か" "ら" "だ" "に" "い" "い" "も" "の" ##[]で指定するとlistです GetData <- ListTest[3] class(GetData) [1] "list" GetData [1] "か" "ら" "だ" "に" "い" "い" "も" "の"
少しでも、あなたの解析が楽になりますように!!