2015-11-12 20 views
5

Từ các câu trả lời khác trên trang web này về các câu hỏi tương tự và ví dụ: từ các trang như http://www.r-tutor.com/r-introduction/data-frame/data-frame-column-vector, có vẻ như tôi trích xuất biến số từ một số data.frame, data[ , "col"]data$col sẽ mang lại kết quả tương tự. Nhưng bây giờ tôi có một số dữ liệu trong Excel:

LU Urban_LU LU_Index Urban_LU_index 
Residential Residential 2 0 
Rural residential Residential 3 0 
Commercial Commercial 4 1 
Public institutions including education Industrial 5 1 
Industry Industrial 7 2 

)

và tôi đọc nó với read_excel từ readxl gói:

library(readxl) 
data <- read_excel("data.xlsx", "Sheet 1") 

Bây giờ tôi trích xuất một biến duy nhất từ ​​các khung dữ liệu, sử dụng [ hoặc $:

data[ , "LU"] 
# Source: local data frame [5 x 1] 
# 
#          LU 
#          (chr) 
# 1        Residential 
# 2      Rural residential 
# 3        Commercial 
# 4 Public institutions including education 
# 5        Industry 

data$LU 
# [1] "Residential"        "Rural residential"      
# [3] "Commercial"        "Public institutions including education" 
# [5] "Industry"        

length(data[ , "LU"]) 
# [1] 1 
length(data$LU) 
# [1] 5 

class(data) 
# [1] "tbl_df"  "tbl"  "data.frame" 

class(data[ , "LU"]) 
# [1] "tbl_df"  "data.frame" 

class(data$LU) 
# [1] "character" 
> 

Vì vậy, sự khác biệt giữa [ , "col"]$col là những gì:

Ngoài ra, những gì tôi thấy nghi ngờ các lớp học của các dữ liệu thu được từ read_excel và các dữ liệu mà kết quả từ hai chế độ khác nhau của khai thác là? Tôi có thiếu thứ gì đó từ sách hướng dẫn hoặc đây có phải là trường hợp đặc biệt không? Ngoài ra, những gì có số nhận dạng lớp học tbl_dftbl? Tôi nghi ngờ rằng họ là nguyên nhân của sự nhầm lẫn của tôi, họ có ý nghĩa gì?

+9

Vâng, đây là trường hợp đặc biệt. Bạn đã bước vào thế giới của Hadley. Nếu bạn làm 'dữ liệu <- as.data.frame (dữ liệu)' bạn nên làm tốt khi thực hiện 'dữ liệu [," LU "]'. Đó là do sử dụng 'readxl' mà bạn cần làm điều này. –

+4

'dữ liệu' không phải là dữ liệu" thực ". –

+0

Quyền - thực sự làm cho nó hoạt động. Đối với ngắn gọn tôi rời khỏi câu hỏi ban đầu của tôi rằng tôi đã tìm thấy nó nghi ngờ rằng các tài liệu readxl không rõ ràng tài liệu kiểu trả về. Vì vậy, có một nơi nào đó mà tôi có thể đọc về những gì đang xảy ra ở đó? – Roel

Trả lời

1

Thêm một bình luận mở rộng:

Thực tế là readxl::read_xl lợi nhuận đầu ra của lớp tbl_df dường như kém tài liệu trong ?read_xl. Hành vi này đã được đề cập trong announcement of readxl on the RStudio blog mặc dù:

"[read_xl r] eturns đầu ra với lớp c("tbl_df", "tbl", "data.frame")"

Để tìm hiểu thêm về tbl_df, chúng ta cần phải tham khảo ý kiến ​​các dplyr trang trợ giúp. Trong Phương pháp phần của ?dplyr::tbl_df, chúng tôi thấy rằng "tbl_df thực hiện hai phương pháp cơ sở quan trọng: [ Chưa bao giờ đơn giản hoá (giọt), vì vậy luôn luôn trả data.frame".

Để biết thêm thông tin chi tiết, hãy đọc về đối số drop trong ?[.data.frame.

Liên quan Q & A: Extract a dplyr tbl column as a vectorBest practice to get a dropped column in dplyr tbl_df.

Xem thêm the 'original' issue on github và thảo luận trong đó.

Các vấn đề liên quan