Получение векторов столбцов из 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. Тем более, что в моем случае вполне вероятно, что кто-то еще может использовать мой код. Есть ли простой способ сделать это (не перечисляя каждый столбец один за другим)?

0 ответов

Другие вопросы по тегам