Подмножество фрейма данных в квадратных скобках в R - PullRequest
0 голосов
/ 09 января 2020

Я только начинаю с R и столкнулся со следующей проблемой.

Подстановка фреймов данных в квадратные скобки таким же образом, похоже, приведет либо к вектору, либо к фрейму данных. Почему эта разница? Ниже приведены два фрейма данных, которые я пытаюсь установить на подмножество.

Первый фрейм данных matching, который я задаю с помощью matching[,1], что дает мне фрейм данных только с одним столбцом.

> attributes(matching)
$names
[1] "A" "B" "C" "D" "E" "F" "G" "H"

$row.names
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
[50] 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

$class
[1] "tbl_df"     "tbl"        "data.frame"

> matching[,1]
# A tibble: 67 x 1
       A
   <int>
 1     1
 2     2
 3     3
 4     4
 5     5
 6     6
 7     7
 8     8
 9     9
10    10
# ... with 57 more rows
> 

Второй фрейм данных files, который я задаю с помощью files[,1], который дает мне вектор

> attributes(files)
$names
[1] "names"

$row.names
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
[50] 50 51 52 53 54 55 56 57 58 59 60 61 62

$class
[1] "data.frame"

> files[,1]
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
[50] 50 51 52 53 54 55 56 57 58 59 60 61 62

Первый был создан с read_excel из файлов Excel, и второй с data.frame() из вектора символьных строк.

Спасибо!

1 Ответ

1 голос
/ 09 января 2020

Из класса видно, что matching - это тиббл, а files - это фрейм данных. Это одно из различий между объектами tibble и dataframe.

matching <- mtcars %>% as_tibble()
files <- mtcars

Подмножество одного столбца из таблицы

matching[, 1]

# A tibble: 32 x 1
#     mpg
#   <dbl>
# 1  21  
# 2  21  
# 3  22.8
# 4  21.4
# 5  18.7
# 6  18.1
# 7  14.3
# 8  24.4
# 9  22.8
#10  19.2
# … with 22 more rows

Подмножество столбца из кадра данных

files[, 1]
# [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 
#     10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7 
#     15.0 21.4

При задании подмножества данных по умолчанию drop = TRUE. В ?Extract вы можете увидеть

drop - если TRUE, результат приведен к наименьшему возможному измерению.

Однако по умолчанию в столбцах есть drop = FALSE. В ?"tbl_df-class"

df [, j] возвращается тибль; это не автоматически извлекает столбец внутри. df [, j, drop = FALSE] является значением по умолчанию.

Чтобы заставить фрейм данных вести себя как столбец, вы можете сделать

files[,1, drop = FALSE]
...