行名と列名の変更
データフレームの要素の変更に続いて、行名と列名の変更の方法を紹介します。
データフレームの行名と列名を変更するときは、関数rownamesまたはcolnamesを使います。
行名・列名を全て変更したい場合、次のように行数または列数分の長さのcharacter型のベクトルを代入すれば大丈夫です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | > #行・列名の変更 > rownames(df1) <- paste0("ID:", seq(1, 10)) #行名全てを変更 > colnames(df1) <- c("NUMBERS", "LETTERS", "LOGICALS", "DATES") #列名全てを変更 > > df1 NUMBERS LETTERS LOGICALS DATES ID:1 1 abc TRUE 2022-01-29 ID:2 2 abc TRUE 2022-01-30 ID:3 3 abc TRUE 2022-01-31 ID:4 4 abc TRUE 2022-02-01 ID:5 5 abc TRUE 2022-02-02 ID:6 6 abc TRUE 2022-02-03 ID:7 7 abc TRUE 2022-02-04 ID:8 8 abc TRUE 2022-02-05 ID:9 9 abc TRUE 2022-02-06 ID:10 10 abc TRUE 2022-02-07 |
インデックスで指定
データフレームのある特定の行名や列名を変更したいことがあると思います。インデックスを与えることで、指定した行名または列名のみを変更することが可能です。
以下、実行例です。rownames(df)やcolnames(df)にnumeric型のベクトルを与えることで、指定した行名や列名のみを変更できているのが確認できます。
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 31 32 | > #インデックスで変更 > rownames(df1)[1] <- "ID:001" #1番目の行名の変更 > colnames(df1)[1] <- "integer" #1番目の列名の変更 > > df1 integer LETTERS LOGICALS DATES ID:001 1 abc TRUE 2022-01-29 ID:2 2 abc TRUE 2022-01-30 ID:3 3 abc TRUE 2022-01-31 ID:4 4 abc TRUE 2022-02-01 ID:5 5 abc TRUE 2022-02-02 ID:6 6 abc TRUE 2022-02-03 ID:7 7 abc TRUE 2022-02-04 ID:8 8 abc TRUE 2022-02-05 ID:9 9 abc TRUE 2022-02-06 ID:10 10 abc TRUE 2022-02-07 > > rownames(df1)[c(2, 3)] <- c("ID:002", "ID:003") #2と3番目の行名の変更 > colnames(df1)[c(2, 3)] <- c("string", "bool") #2と3番目の列名の変更 > > df1 integer string bool DATES ID:001 1 abc TRUE 2022-01-29 ID:002 2 abc TRUE 2022-01-30 ID:003 3 abc TRUE 2022-01-31 ID:4 4 abc TRUE 2022-02-01 ID:5 5 abc TRUE 2022-02-02 ID:6 6 abc TRUE 2022-02-03 ID:7 7 abc TRUE 2022-02-04 ID:8 8 abc TRUE 2022-02-05 ID:9 9 abc TRUE 2022-02-06 ID:10 10 abc TRUE 2022-02-07 |
行名や列名で指定(真偽値で指定)
行名や列名を指定することでデータフレームの行名や列名を変更する方法<.span>を紹介します。
上で紹介したインデックスで変更する方法は簡単ですが、インデックスが間違っていたりデータセット行や列の順番が変わってしまうと色々と問題が起こります。
R言語のデフォルトの環境には名前で行名や列名を変更できる便利な関数は残念ながらありません(他のパッケージを使えばあります)。
少々汚くはなりますが、次のようにrownames(df)やcolnames(df)にlogical型のベクトルを与えることで名前と一致する行名や列名を変更することができます。
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 31 32 | > #名前で変更(真偽値で変更) > rownames(df1)[rownames(df1) == "ID:001"] <- "id:1" #行名"id:1"を変更 > colnames(df1)[colnames(df1) == "integer"] <- "numbers" #列名"numbers"を変更 > > df1 numbers string bool DATES id:1 1 abc TRUE 2022-01-29 ID:002 2 abc TRUE 2022-01-30 ID:003 3 abc TRUE 2022-01-31 ID:4 4 abc TRUE 2022-02-01 ID:5 5 abc TRUE 2022-02-02 ID:6 6 abc TRUE 2022-02-03 ID:7 7 abc TRUE 2022-02-04 ID:8 8 abc TRUE 2022-02-05 ID:9 9 abc TRUE 2022-02-06 ID:10 10 abc TRUE 2022-02-07 > > rownames(df1)[rownames(df1) %in% c("ID:002", "ID:003")] <- c("id:2", "id:3") #行名"id:1"を変更 > colnames(df1)[colnames(df1) %in% c("string", "bool")] <- c("letters", "logicals") #列名"numbers"を変更 > > df1 numbers letters logicals DATES id:1 1 abc TRUE 2022-01-29 id:2 2 abc TRUE 2022-01-30 id:3 3 abc TRUE 2022-01-31 ID:4 4 abc TRUE 2022-02-01 ID:5 5 abc TRUE 2022-02-02 ID:6 6 abc TRUE 2022-02-03 ID:7 7 abc TRUE 2022-02-04 ID:8 8 abc TRUE 2022-02-05 ID:9 9 abc TRUE 2022-02-06 ID:10 10 abc TRUE 2022-02-07 |
注意として、真偽値で指定し手変更しているので例えば、rownames(df)[rownames(df) %in% c("old1", . . . , "oldr")] <- c("new1", . . . , "newr")のように、ベクトルの要素の位置が古いものと新しいもので一致している必要があります。
行と列の追加・挿入・削除
行と列の追加及び削除について解説します。インデックスで指定する方法と行名や列名で指定する方法の2通りをまとめました。
インデックスで指定
インデックスでデータフレームに新しい行や列を追加及び削除する方法について見ていきます。
以下、インデックスで追加または削除する方法です。
- 新しい行を追加したい場合は、df1[ncol(df) + 1, ]
- に新しい列を追加したい場合は、df1[, ncol(df) + 1]
- 5行目と6行目の間に行newRowを挿入したいときは、rbind(df1[seq(1, 5), ], newRow, df1[seq(6, 10), ])
- 2列目と3列目の間に列newColを挿入したいときは、cbind(df1[, seq(1, 2)], newCol, df1[, seq(3, 4)])
- 5行目を削除したいときは、df[-5, ]
- 2列目を削除したいときは、df[, -2]
データフレームに新しい行や列を追加したい場合は次のように、行数+1または列数+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 31 32 33 34 | > #行・列の追加・削除 > #インデックスで追加・削除 > df1[11, ] <- c(11, "k", TRUE, "2022-02-02") #11行目に追加 > df1[nrow(df1) + 1, ] <- c(12, "l", FALSE, "2022-02-03") #新しい行を追加 > > df1 numbers letters logicals DATES id:1 1 abc TRUE 2022-01-29 id:2 2 abc TRUE 2022-01-30 id:3 3 abc TRUE 2022-01-31 ID:4 4 abc TRUE 2022-02-01 ID:5 5 abc TRUE 2022-02-02 ID:6 6 abc TRUE 2022-02-03 ID:7 7 abc TRUE 2022-02-04 ID:8 8 abc TRUE 2022-02-05 ID:9 9 abc TRUE 2022-02-06 ID:10 10 abc TRUE 2022-02-07 11 11 k TRUE 2022-02-02 12 12 l FALSE 2022-02-03 > > df1 <- df1[-c(11, 12), ] #11と12行目の削除 > > df1 numbers letters logicals DATES id:1 1 abc TRUE 2022-01-29 id:2 2 abc TRUE 2022-01-30 id:3 3 abc TRUE 2022-01-31 ID:4 4 abc TRUE 2022-02-01 ID:5 5 abc TRUE 2022-02-02 ID:6 6 abc TRUE 2022-02-03 ID:7 7 abc TRUE 2022-02-04 ID:8 8 abc TRUE 2022-02-05 ID:9 9 abc TRUE 2022-02-06 ID:10 10 abc TRUE 2022-02-07 |
また、列に関しても同様に新しい列の追加と削除が可能です。以下、列の追加と削除実行例です。
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 | > df1[, 5] <- LETTERS[seq(1, 10)] #5列目に追加 > df1[, ncol(df1) + 1] <- seq(1, 10) #新しい列を追加 > > df1 numbers letters logicals DATES V5 V6 id:1 1 abc TRUE 2022-01-29 A 1 id:2 2 abc TRUE 2022-01-30 B 2 id:3 3 abc TRUE 2022-01-31 C 3 ID:4 4 abc TRUE 2022-02-01 D 4 ID:5 5 abc TRUE 2022-02-02 E 5 ID:6 6 abc TRUE 2022-02-03 F 6 ID:7 7 abc TRUE 2022-02-04 G 7 ID:8 8 abc TRUE 2022-02-05 H 8 ID:9 9 abc TRUE 2022-02-06 I 9 ID:10 10 abc TRUE 2022-02-07 J 10 > > df1 <- df1[, -c(5, 6)] #5と6列目の削除 > > df1 numbers letters logicals DATES id:1 1 abc TRUE 2022-01-29 id:2 2 abc TRUE 2022-01-30 id:3 3 abc TRUE 2022-01-31 ID:4 4 abc TRUE 2022-02-01 ID:5 5 abc TRUE 2022-02-02 ID:6 6 abc TRUE 2022-02-03 ID:7 7 abc TRUE 2022-02-04 ID:8 8 abc TRUE 2022-02-05 ID:9 9 abc TRUE 2022-02-06 ID:10 10 abc TRUE 2022-02-07 |
データフレームの途中に行や列を挿入するには次のように関数rbind、cbindを用いて、挿入したい位置までのデータフレームと、新しい行または列のデータフレームと、挿入したい位置以降のデータフレームを連結させます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | > df1 <- rbind(df1[seq(1, 5), ], newRow = c(111, "aaa", TRUE, "2022-02-02"), df1[seq(6, 10), ]) #5行目と6行目の間に挿入 > df1 <- cbind(df1[, seq(1, 2)], newCol = 100 * seq(1, 11), df1[, seq(3, 4)]) #3列目と4列目の間に挿入 > > df1 numbers letters newCOl logicals DATES id:1 1 abc 100 TRUE 2022-01-29 id:2 2 abc 200 TRUE 2022-01-30 id:3 3 abc 300 TRUE 2022-01-31 ID:4 4 abc 400 TRUE 2022-02-01 ID:5 5 abc 500 TRUE 2022-02-02 newRow 111 aaa 600 TRUE 2022-02-02 ID:6 6 abc 700 TRUE 2022-02-03 ID:7 7 abc 800 TRUE 2022-02-04 ID:8 8 abc 900 TRUE 2022-02-05 ID:9 9 abc 1000 TRUE 2022-02-06 ID:10 10 abc 1100 TRUE 2022-02-07 |
行名や列名で指定
次に行名や列名で行や列を追加または削除する例を紹介します。
以下、行名や列名で行と列を追加または削除する方法です。
- 行名"id:11"の新しい行を追加したい場合は、df1["id:11", ]
- 列名"LETTERS"の新しい列を追加したい場合は、df1[, "LETTERS"]
- 行名"id:11"の行を削除したいときは、subset(df, subset = !(rownames(df) %in% "id:11"))
- 列名"LETTERS"の列を削除したいときは、subset(df, select = setdiff(colnames(df), "LETTERS"))
行名を用いて新しい行を追加するには、次のようにデータフレームに新しい行名を与えることで実現できます。行の削除は関数subsetを用いて引数subsetを!(rownames(df1) %in% "削除したい行名")とすればおkです。
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 31 32 | > #名前で追加・削除 > df1["id:11", ] <- c(11, "k", 1200, TRUE, "2022-02-08") #行名id:11を追加 > > df1 numbers letters newCOl logicals DATES id:1 1 abc 100 TRUE 2022-01-29 id:2 2 abc 200 TRUE 2022-01-30 id:3 3 abc 300 TRUE 2022-01-31 ID:4 4 abc 400 TRUE 2022-02-01 ID:5 5 abc 500 TRUE 2022-02-02 newRow 111 aaa 600 TRUE 2022-02-02 ID:6 6 abc 700 TRUE 2022-02-03 ID:7 7 abc 800 TRUE 2022-02-04 ID:8 8 abc 900 TRUE 2022-02-05 ID:9 9 abc 1000 TRUE 2022-02-06 ID:10 10 abc 1100 TRUE 2022-02-07 id:11 11 k 1200 TRUE 2022-02-08 > > df1 <- subset(df1, subset = !(rownames(df1) %in% c("newRow", "id:11"))) #行名id:11を削除 > > df1 numbers letters newCOl logicals DATES id:1 1 abc 100 TRUE 2022-01-29 id:2 2 abc 200 TRUE 2022-01-30 id:3 3 abc 300 TRUE 2022-01-31 ID:4 4 abc 400 TRUE 2022-02-01 ID:5 5 abc 500 TRUE 2022-02-02 ID:6 6 abc 700 TRUE 2022-02-03 ID:7 7 abc 800 TRUE 2022-02-04 ID:8 8 abc 900 TRUE 2022-02-05 ID:9 9 abc 1000 TRUE 2022-02-06 ID:10 10 abc 1100 TRUE 2022-02-07 |
同様に列に関しても追加と削除が可能です。データフレームに新しく追加する列の列名を与えることでできます。列を削除する際は、関数subsetの引数selectに削除後の列名setdiff(colnames(df), "削除したい列名")にすることでできます。
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 | > df1$meta <- c("foo", "bar", "foobar", "baz", "qux", "quux", "corge", "grault", "garply,", "waldo") #列名metaを追加 > df1[, "メタ構文"] <- c("foo", "bar", "foobar", "baz", "qux", "quux", "corge", "grault", "garply,", "waldo") > > df1 numbers letters newCol logicals DATES meta メタ構文 id:1 1 abc 100 TRUE 2022-01-29 foo foo id:2 2 abc 200 TRUE 2022-01-30 bar bar id:3 3 abc 300 TRUE 2022-01-31 foobar foobar ID:4 4 abc 400 TRUE 2022-02-01 baz baz ID:5 5 abc 500 TRUE 2022-02-02 qux qux ID:6 6 abc 700 TRUE 2022-02-03 quux quux ID:7 7 abc 800 TRUE 2022-02-04 corge corge ID:8 8 abc 900 TRUE 2022-02-05 grault grault ID:9 9 abc 1000 TRUE 2022-02-06 garply, garply, ID:10 10 abc 1100 TRUE 2022-02-07 waldo waldo > > df1 <- subset(df1, select = setdiff(colnames(df1), c("newCol", "meta", "メタ構文"))) #列名metaとメタ構文を削除 > > df1 numbers letters logicals DATES id:1 1 abc TRUE 2022-01-29 id:2 2 abc TRUE 2022-01-30 id:3 3 abc TRUE 2022-01-31 ID:4 4 abc TRUE 2022-02-01 ID:5 5 abc TRUE 2022-02-02 ID:6 6 abc TRUE 2022-02-03 ID:7 7 abc TRUE 2022-02-04 ID:8 8 abc TRUE 2022-02-05 ID:9 9 abc TRUE 2022-02-06 ID:10 10 abc TRUE 2022-02-07 |
データフレームの結合
2つのデータフレームを結合する方法を紹介します。次の3つのデータフレームdfA、dfB、dfCを例に結合する例をみていきます。
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 | > #データフレームの結合 > dfA <- data.frame(ID = seq(1, 5), letters = letters[seq(1, 5)]) > dfB <- data.frame(ID = seq(3, 7), letters = c("a", "d", "e", "f", "a"), + floats = seq(0.2, 1, 0.2), dates = seq(Sys.Date(), by = "day", length.out = 5)) > dfC <- data.frame(ID = seq(6, 10), letters = letters[seq(6, 10)]) > > dfA ID letters 1 1 a 2 2 b 3 3 c 4 4 d 5 5 e > > dfB ID letters floats dates 1 3 a 0.2 2022-01-29 2 4 d 0.4 2022-01-30 3 5 e 0.6 2022-01-31 4 6 f 0.8 2022-02-01 5 7 a 1.0 2022-02-02 > > dfC ID letters 1 6 f 2 7 g 3 8 h 4 9 i 5 10 j |
縦に結合
縦方向に結合させたいときは、関数rbindを用います。rbindは全く同じ列名をもつデータフレームにのみ適用できます。1つ目と2つ目の引数に2つのデータフレームを指定することでデータフレームを縦に結合できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 | > #縦に結合 > rbind(dfA, dfC) ID letters 1 1 a 2 2 b 3 3 c 4 4 d 5 5 e 6 6 f 7 7 g 8 8 h 9 9 i 10 10 j |
横に結合
横方向に結合させたいときは、関数cbind、data.frameを用います。使い方はrbindのときと同じです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | > #横に結合 > cbind(dfA, dfB) ID letters ID letters floats dates 1 1 a 3 a 0.2 2022-01-29 2 2 b 4 d 0.4 2022-01-30 3 3 c 5 e 0.6 2022-01-31 4 4 d 6 f 0.8 2022-02-01 5 5 e 7 a 1.0 2022-02-02 > > data.frame(dfA, dfB) ID letters ID.1 letters.1 floats dates 1 1 a 3 a 0.2 2022-01-29 2 2 b 4 d 0.4 2022-01-30 3 3 c 5 e 0.6 2022-01-31 4 4 d 6 f 0.8 2022-02-01 5 5 e 7 a 1.0 2022-02-02 |
data.frameはデフォルトで引数check.namesがTRUEであるため、2つのデータフレームが同じ列名を持っている場合、同じ列名にならないような処理が行われます。上ではdfBの列名"ID"が"ID.1"に変更されています。これを回避するには下のようにcheck.names = FALSEとします。
1 2 3 4 5 6 7 | > data.frame(dfA, dfB, check.names = FALSE) #列名のチェックを入れない場合 ID letters ID letters floats dates 1 1 a 3 a 0.2 2022-01-29 2 2 b 4 d 0.4 2022-01-30 3 3 c 5 e 0.6 2022-01-31 4 4 d 6 f 0.8 2022-02-01 5 5 e 7 a 1.0 2022-02-02 |
データフレームの併合・マージ
2つのデータフレームを併合させたいときは関数mergeを用います。実行すると次のように同じ列名に対して併合が行われます。下の例では、列名は"ID"と"letters"が同じです。"ID"と"letters"の要素が2つのデータフレームで同じもののみが併合対象となります。
1 2 3 4 5 | > #データフレームの併合 > merge(dfA, dfB) ID letters floats dates 1 4 d 0.4 2022-01-30 2 5 e 0.6 2022-01-31 |
列名"ID"のみで併合したいときは、引数byを”ID”にしましょう。
1 2 3 4 5 | > merge(dfA, dfB, by = "ID") ID letters.x letters.y floats dates 1 3 c a 0.2 2022-01-29 2 4 d d 0.4 2022-01-30 3 5 e e 0.6 2022-01-31 |
また、引数allをTRUEにすると、次のようにIDが同じでない行も含めて併合することができます。 2つのデータフレームに含まれていないIDは、次のようにNAで穴埋めされます。
1 2 3 4 5 6 7 8 9 | > merge(dfA, dfB, by = "ID", all = TRUE) ID letters.x letters.y floats dates 1 1 a <NA> NA <NA> 2 2 b <NA> NA <NA> 3 3 c a 0.2 2022-01-29 4 4 d d 0.4 2022-01-30 5 5 e e 0.6 2022-01-31 6 6 <NA> f 0.8 2022-02-01 7 7 <NA> a 1.0 2022-02-02 |
データフレームのソートと並び替え
データフレームの行や列の並び替えはインデックスや行名、列名を与えることでできます。インデックスを指定する方法と行名や列名で指定する方法の2通りに分けて解説していきます。
インデックスで指定
次のようにデータフレームに順序を表すインデックスのベクトルを与えることで順序を変更することができます。
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | > df3 <- data.frame(numbers = c(2, 6, 9, 4, 1, 3, 7, 8, 10, 5), + letters = c("c", "f", "a", "h", "g", "b", "i", "e", "d", "j"), + row.names = paste0("id:", seq(10))) > > df3 numbers letters id:1 2 c id:2 6 f id:3 9 a id:4 4 h id:5 1 g id:6 3 b id:7 7 i id:8 8 e id:9 10 d id:10 5 j > > df3 <- df3[c(setdiff(seq_len(nrow(df3)), 1), 1), ] #1行目を末尾に移動 > > df3 numbers letters id:2 6 f id:3 9 a id:4 4 h id:5 1 g id:6 3 b id:7 7 i id:8 8 e id:9 10 d id:10 5 j id:1 2 c > > df3 <- df3[c(setdiff(seq_len(nrow(df3)), seq(1, 9)), seq(1, 9)), ] #1から9行目を後ろに移動 > > df3 numbers letters id:1 2 c id:2 6 f id:3 9 a id:4 4 h id:5 1 g id:6 3 b id:7 7 i id:8 8 e id:9 10 d id:10 5 j |
また、列の順番の変更も同様に可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | > df3 <- df3[, c(2, 1)] #1列目と2列目を交換 > > df3 letters numbers id:1 c 2 id:2 f 6 id:3 a 9 id:4 h 4 id:5 g 1 id:6 b 3 id:7 i 7 id:8 e 8 id:9 d 10 id:10 j 5 |
ソート
関数orderを使うことであるベクトルの要素の順番を得ることができます。データフレームを特定の列でソートしたいときは関数orderを使いましょう。
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 | > df3[order(df3$letters), ] #昇順 letters numbers id:3 a 9 id:6 b 3 id:1 c 2 id:9 d 10 id:8 e 8 id:2 f 6 id:5 g 1 id:4 h 4 id:7 i 7 id:10 j 5 > > df3[order(df3$numbers), ] letters numbers id:5 g 1 id:1 c 2 id:6 b 3 id:4 h 4 id:10 j 5 id:2 f 6 id:7 i 7 id:8 e 8 id:3 a 9 id:9 d 10 |
また、引数decreasingをTRUEにすると降順にできます。
1 2 3 4 5 6 7 8 9 10 11 12 | > df3[order(df3$letters, decreasing = TRUE), ] #降順 letters numbers id:10 j 5 id:7 i 7 id:4 h 4 id:5 g 1 id:2 f 6 id:8 e 8 id:9 d 10 id:1 c 2 id:6 b 3 id:3 a 9 |
また、次のように行方向に関するソートも可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | > #行方向のソート > df4 <- data.frame(A = rep(1, 5), B = rep(2, 5), C = rep(3, 5), D = rep(4, 5)) > > df4 A B C D 1 1 2 3 4 2 1 2 3 4 3 1 2 3 4 4 1 2 3 4 5 1 2 3 4 > > df4[, order(colnames(df4), decreasing = TRUE)] D C B A 1 4 3 2 1 2 4 3 2 1 3 4 3 2 1 4 4 3 2 1 5 4 3 2 1 |
逆順
関数revを用いることでベクトルの要素を逆にできます。関数seqなどで列数分の数列を得た後にrevを適用することで、次のようにデータフレームを縦方向または横方向に逆転することができます。
1 2 3 4 5 6 7 8 9 10 11 12 | > df3[rev(seq_len(nrow(df3))), ] #逆順 letters numbers id:10 j 5 id:9 d 10 id:8 e 8 id:7 i 7 id:6 b 3 id:5 g 1 id:4 h 4 id:3 a 9 id:2 f 6 id:1 c 2 |
行名や列名で指定
インデックスと同様に行名や列名をデータフレームに与えることでデータフレームの順番を変更することが可能です。
以下、上のインデックスで行ったものの行名および列名版です。
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 | > #名前でソート > df3 <- df3[c(setdiff(rownames(df3), "id:1"), "id:1"), ] #行名"id:1"の行を末尾に移動 > > df3 letters numbers id:2 f 6 id:3 a 9 id:4 h 4 id:5 g 1 id:6 b 3 id:7 i 7 id:8 e 8 id:9 d 10 id:10 j 5 id:1 c 2 > > df3 <- df3[, c("numbers", "letters")] #列名numbersとlettersを交換 > > df3 numbers letters id:2 6 f id:3 9 a id:4 4 h id:5 1 g id:6 3 b id:7 7 i id:8 8 e id:9 10 d id:10 5 j id:1 2 c |