Скажем, у меня есть data.frame:
df <- data.frame(A=c(10,20,30),B=c(11,22,33), C=c(111,222,333))
A B C
1 10 11 111
2 20 22 222
3 30 33 333
Если я выберу два (или более) столбца, я получу data.frame:
x <- df[,1:2]
A B
1 10 11
2 20 22
3 30 33
Это то, что я хочу. Однако, если я выберу только один столбец, я получу числовой вектор:
x <- df[,1]
[1] 1 2 3
Я попытался использовать as.data.frame(), который не меняет результаты для двух или более столбцов. он возвращает data.frame в случае одного столбца, но не сохраняет имя столбца:
x <- as.data.frame(df[,1])
df[, 1]
1 1
2 2
3 3
Я не понимаю, почему он так себя ведет. На мой взгляд, не должно иметь значения, если я извлеку один, два или десять столбцов. Он должен либо всегда возвращать вектор (или матрицу), либо всегда возвращать data.frame (с правильными именами). что мне не хватает? Спасибо!
Примечание. Это не дублирует вопрос о матрицах, так как matrix и data.frame - это принципиально разные типы данных в R и могут по-разному работать с dplyr. Есть несколько ответов, которые работают с data.frame, но не с матрицей.