2012-04-06 65 views
9

Thông thường khi bạn nhận được một cột, đó là một vectơ. Làm thế nào tôi có thể giữ nó như data.frame với cùng tên hàng và tên cột tương ứng?cách lấy mỗi cột dưới dạng data.frame (thay vì vectơ) từ một data.frame?

+0

có thể trùng lặp [Ma trận 1 chiều được thay đổi thành vectơ trong R] (http://stackoverflow.com/questions/9949202/1-dimensional-matrix-is-changed-to-a-vector -in-r) – joran

+0

@joran Rất tiếc, không thấy có thể trùng lặp. Tôi sẽ để lại câu trả lời của tôi và nếu câu hỏi này bị đóng, thì câu trả lời của tôi là một điểm tranh luận. –

+0

@TylerRinker Đừng lo lắng về điều đó. Đây chỉ là một câu hỏi thực sự phổ biến, đó là tất cả. – joran

Trả lời

13

Thay vì gọi cột mong muốn bằng dấu phẩy, ví dụ: data.frame [, i] sử dụng data.frame [i] để giữ lớp đó dưới dạng data.frame và cũng giữ lại tên hàng.

data.frame[,i] #As a vector 
data.frame[i] #As a data.frame 
+0

Tốt, tôi không biết bạn có thể làm điều đó +1 –

+0

Tôi đoán rằng thêm một số giá trị vào bài đăng câu hỏi của tôi và xứng đáng không được đóng :) – RNA

5

sử dụng thả luận = FALSE như trong:

mtcars[, 1, drop = FALSE] 
0

Nếu bạn chỉ định một số duy nhất khi Subsetting một data.frame, bạn sẽ có được một cột data.frame. Điều này khác với việc đặt ma trận, yêu cầu đối số "thiếu" i để trả về toàn bộ cột (sau đó nó chuyển thành một vectơ).

# mtcars is a data.frame 
mtcars[1]  # first column 
str(mtcars[1]) # is still a data.frame 
# 'data.frame': 32 obs. of 1 variable: 
# $ mpg: num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ... 
# MTCARS is a matrix 
MTCARS <- as.matrix(mtcars) 
as.matrix(MTCARS)[1]  # only the first element 
# [1] 21 
str(as.matrix(MTCARS)[,1]) # the first column, as a vector 
Named num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ... 
- attr(*, "names")= chr [1:32] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" ... 
Các vấn đề liên quan