Я хочу создать фрейм данных из последних элементов списка.Здесь я описал два случая, один легкий, а другой немного дополненный.
Простой случай
Предположим, список или два вектора v
v <- list("22" = c(2, 3, 5), "23" = c("aa", "bb"))
> str(v)
List of 2
$ 22: num [1:3] 2 3 5
$ 23: chr [1:2] "aa" "bb"
Я хочу иметь фрейм данных, где вВ первом столбце у меня будут имена элементов (здесь 22 и 23), а во втором столбце у меня будет последний элемент этого вектора.
Я могу написать следующие коды для генерации того, что я хочу,
last_elems1 <- lapply(v, tail, n = 1L)
last_elems1 <- data.frame(last_elems1)
tidyr::gather(last_elems1)
> tidyr::gather(last_elems1)
key value
1 X22 5
2 X23 bb
У меня есть следующие вопросы здесь,
- Как мне избежать "X" в столбце "ключ", например, я хочу только номер 22, а не X22.
Стоит ли беспокоиться по поводу сообщения об ошибке?
Предупреждающее сообщение: атрибуты не одинаковы для переменных показателей;они будут отброшены
Слегка завершенный пример
Здесь у меня есть список из двух (или более) фреймов данных с двумя векторами внутри.Список может быть сгенерирован следующим образом:
w <- list("22" = data.frame(a = c(2, 3, 5),
b = c(5, 6, 8)),
"23" = data.frame(a = c(9, 10),
b = c(11, 12))
)
> str(w)
List of 2
$ 22:'data.frame': 3 obs. of 2 variables:
..$ a: num [1:3] 2 3 5
..$ b: num [1:3] 5 6 8
$ 23:'data.frame': 2 obs. of 2 variables:
..$ a: num [1:2] 9 10
..$ b: num [1:2] 11 12
Я хочу иметь последний элемент переменной b из каждого фрейма данных в списке.Я использую те же коды, описанные выше, и это дает мне следующее,
last_elems2 <- lapply(w, tail, n = 1L)
last_elems2 <- data.frame(last_elems2)
tidyr::gather(last_elems2)
> tidyr::gather(last_elems2)
key value
1 X22.a 5
2 X22.b 8
3 X23.a 10
4 X23.b 12
Вот мои вопросы,
Как получить значение в столбце
key
, например
22
вместо
X22.b
. Мне нужна только строка
2
и строка
4
.Это значит, что на выходе должно быть:
tidyr::gather(last_elems2)
key value
1 22 8
2 23 12
Есть идеи, как настроить то, что я делаю?