Как работать с тибблами при поднаборе / индексировании столбца фрейма данных в R?

В настоящее время я создаю подмножество столбца фрейма данных следующим образом df_subset <- df[,c(2)]

       Measurement
       ------------
1        2752
2        2756
3        2756
4        2740
5        2724
6        2536
7        2796
8        2800

В выходных данных говорится, что это тайббл 50 x 1, что имеет смысл, потому что здесь 50 строк и 1 столбец. Однако я не знаю, как бороться с тибетами. Насколько я понимаю, я не могу индексировать его, как список или вектор. Легко ли индексировать тиббл, и если да, то как? Если нет, как мне преобразовать это в список / вектор? Просто чтобы дать вам представление о том, что я хочу сделать, скажем, я хочу проиндексировать 8-е, 15-е, 23-е и 47-е значения измерения, и я хотел бы, чтобы конечный результат в идеале был вектором или чем-то еще, что легко работать с.


person Jane Sully    schedule 20.11.2017    source источник
comment
Спасибо! Это определенно помогает. Поэтому я отредактировал свое описание, потому что моя формулировка сбивала с толку. Я не против работать с тиблом напрямую, но я хочу, чтобы на выходе был вектор / что-то, с чем легко работать. Есть ли способ преобразовать то, что вы сделали, в вектор?   -  person Jane Sully    schedule 20.11.2017
comment
rows<- c(8, 25, 23, 27), затем df[rows, ]   -  person Matt W.    schedule 20.11.2017
comment
Вы можете просто преобразовать обратно во фрейм данных, используя as.data.frame(), если тиббл вызывает проблемы ...   -  person Mako212    schedule 20.11.2017


Ответы (2)


Индексирование tibble аналогично индексации data.frames, за исключением того факта, что data.frames пытается вернуть наименьшее возможное измерение, отсюда следующее различие:

library(tibble)
df = data.frame(Measurement = c(2752,2756,2756,2740,2724,2536,2796,2800))
df_tib = as.tibble(df)

index = c(2,3,6,7)

Фрейм данных индексации:

df[index,]
# [1] 2756 2756 2536 2796

df_tib[index,]
# A tibble: 4 x 1
#   Measurement
#         <dbl>
# 1        2756
# 2        2756
# 3        2536
# 4        2796

Обратите внимание, что df[index,] приводится к вектору после индексации, потому что data.frame видит, что это фрейм данных только с одним столбцом. tibble не делает этого принуждения. Чтобы переопределить это свойство, вы можете использовать drop=FALSE:

df[index,, drop=FALSE]
#   Measurement
# 2        2756
# 3        2756
# 6        2536
# 7        2796

Чтобы получить вектор после индексации, вы действительно хотите проиндексировать столбец Measurement. Это делается точно так же с data.frame или tibble:

df$Measurement[index]
# [1] 2756 2756 2536 2796

df_tib$Measurement[index]
# [1] 2756 2756 2536 2796
person acylam    schedule 20.11.2017

В частности, для получения столбца из тиббла вы можете использовать pull():

tb %>% pull(2)
tb %>% pull(Measurement)
person qwr    schedule 23.09.2020