2016-10-27 38 views
5

Tôi đang cố áp dụng một số phép biến đổi cho tất cả các phần tử trong một khung dữ liệu.Áp dụng một chức năng cho tất cả các phần tử của khung dữ liệu

Khi sử dụng các hàm áp dụng thường xuyên, tôi lấy lại ma trận chứ không phải một khung dữ liệu. Có cách nào để lấy trực tiếp một khung dữ liệu mà không cần thêm as.data.frame vào mỗi dòng không?

df = data.frame(a = LETTERS[1:5], b = LETTERS[6:10]) 

apply(df, 1, tolower) #Matrix 
apply(df, 2, tolower) #Matrix 
sapply(df, tolower) #Matrix 

as.data.frame(sapply(df, tolower)) # Can I avoid "as.data.frame"? 

Trả lời

11

Chúng ta có thể sử dụng lapply và gán nó trở lại 'df'

df[] <- lapply(df, tolower) 

Các [] giữ gìn cấu trúc tương tự như các tập dữ liệu ban đầu. Sử dụng apply chuyển đổi nó thành matrix và điều đó không được khuyến nghị.

3

Đây là một cách sử dụng dplyr:

library(dplyr) 
df %>% mutate_each(funs(tolower)) 
Các vấn đề liên quan