Data.frames は、データの基礎となる構造を保持しているように見えますが、これは不便な場合があります。特に、2 つのリスト (rbind を使用して結合) から構築された data.frame があります。基礎となるリスト構造が維持されているため、data.frame から列ベクトルを (簡単に) 引き出すことができず、列ベクトルで実行されることが多い関数は機能しません。data.frame の基礎となる構造をより「予測可能な」形式に変換する方法はありますか。
簡単な例を次に示します。
df1 <- data.frame(a = 2:1, b = 4:3) # "standard" data.frame
df2 <- data.frame(rbind(list(a = 2, b = 4), # "sad" data.frame
list(a = 1, b = 3)))
前者がベクトルで後者がリストであることを簡単に確認しstr(df1$a)
て示します。str(df2$a)
そのため、これは data.frame で実行しようとする可能性のあるいくつかの一般的なことを混乱させます。
df1[order(df1$a), ] # works fine
df2[order(df2$a), ] # returns: Error in order(df2$a) : unimplemented
# type 'list' in 'orderVector1'
これらの問題を unlist で回避できることはわかっていますが、df2 を df1 のdf2[order(unlist(df2$a)), ]
ように動作させたいと思っています。特に、私の場合、他の誰かが私のコードを使用する可能性が高いためです。これを達成する簡単な方法はありますか (各列を次々に非表示にすることなく)?