1. ホーム
  2. r

[解決済み] データフレームの順序付けによる奇妙な動作

2022-02-19 05:37:58

質問

以下のようなデータフレームがあり、5列目("Distance")で並べ替えたいのですが、どうすればよいでしょうか? を試すと

df.order <- df[order(df[, 5]), ]

いつも次のようなエラーメッセージが表示されます。

Error in order(df[, 5]) : unimplemented type 'list' in 'orderVector1'`

なぜRが私のデータフレームをリストと見なすのかわかりません。実行中 is.data.frame(df) は以下を返します。 TRUE . 私は、その is.list(df) も返す。 TRUE . データフレームをリストではなく、データフレームだけにすることは可能でしょうか? よろしくお願いします。

structure(list(ID = list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 
               Latitude = list(50.7368, 50.7368, 50.7368, 50.7369, 50.7369, 50.737, 50.737, 50.7371, 50.7371, 50.7371), 
               Longitude = list(6.0873, 6.0873, 6.0873, 6.0872, 6.0872, 6.0872, 6.0872, 6.0872, 6.0872, 6.0872), 
               Elevation = list(269.26, 268.99, 268.73, 268.69, 268.14, 267.87, 267.61, 267.31, 267.21, 267.02), 
               Distance = list(119.4396, 119.4396, 119.4396, 121.199, 121.199, 117.5658, 117.5658, 114.9003, 114.9003, 114.9003), 
               RxPower = list(-52.6695443922406, -52.269130891243, -52.9735258244422, -52.2116571930007, -51.7784534281727, -52.7703448813654, -51.6558862949081, -52.2892907635308, -51.8322993596551, -52.4971436682333)), 
          .Names = c("ID", "Latitude", "Longitude", "Elevation", "Distance", "RxPower"),
          row.names = c(NA, 10L), class = "data.frame")

解決方法は?

データフレームには、ベクトルではなくリストが含まれています。このデータフレームを "classic"形式に変換するには、次のようにします。 as.data.frameunlist :

df2 <- as.data.frame(lapply(df, unlist))

これで、新しいデータフレームは意図した方法でソートできるようになりました。

df2[order(df2[, 5]), ]