Получение векторов столбцов из data.frame, созданного из списков rbind
Кажется, что Data.frames сохраняют основную структуру данных, что иногда может быть неудобно. В частности, у меня есть data.frame, построенный из двух списков (объединенных с использованием rbind). Поскольку базовая структура списка поддерживается, это означает, что я не могу (легко) извлечь вектор столбца из 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, например, пытаясь упорядочить 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[order(unlist(df2$a)), ]
, но мне бы очень хотелось, чтобы df2 "вел себя как" df1. Тем более, что в моем случае вполне вероятно, что кто-то еще может использовать мой код. Есть ли простой способ сделать это (не перечисляя каждый столбец один за другим)?