Как индексировать столбец фрейма данных по переменной? - PullRequest
1 голос
/ 13 марта 2012

В качестве примера мне нужна функция, которая будет перебирать столбцы в кадре данных и распечатывать тип данных каждого столбца (например, «числовой», «целое число», «символ» и т. Д.)

Без переменной я знаю, что могу сделать class(df$MyColumn) и получить тип данных. Как я могу изменить это так, чтобы «MyColumn» был переменной?

Я пытаюсь это

f <- function(df) {

 for(column in names(df)) {
   columnClass = class(df[column])
   print(columnClass)
 }

}

Но это просто выводит [1] "data.frame" для каждого столбца.

Ответы [ 4 ]

6 голосов
/ 13 марта 2012

Поскольку фрейм данных - это просто список, вы можете циклически перебирать столбцы с помощью lapply и применять функцию class к каждому столбцу:

lapply(df, class)

Для решения ранее невысказанных проблем в комментарии пользователя .... если вы создаете функцию, которая делает то, что вы надеетесь на столбец, то будет успешным:

func <- function(col) {print(class(col))}
lapply(df, func)

Это действительно в основном эквивалентно:

 for(col in names(df) ) { print(class(df[[col]]))} 

И не было бы ненужной переменной 'colClass', загромождающей .GlobalEnv.

2 голосов
/ 13 марта 2012

Используйте запятую перед column:

for(column in names(df)) {
   columnClass = class(df[,column])
   print(columnClass)
 }
1 голос
/ 13 марта 2012

Как и предполагал DWin

apply(df,2,class)

, но вы говорите, что хотите делать больше с каждым столбцом?Что ты хочешь делать.Старайтесь избегать абстрактных примеров.В случае, если это помогает

apply(df,2,mean)
apply(df,2,sd)

или что-то более сложное

apply(df,2,function(x){s = c(summary(x)["Mean"], summary(x)["Median"], sd(x))})

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

0 голосов
/ 13 марта 2012

Вы можете использовать функцию colwise пакета plyr для преобразования любой функции в функцию столбца. Это обертка для lapply .

library(plyr)

colwise.print.class<-colwise(.fun=function(col) {print(class(col))})

colwise.print.class(df)

Вы можете просмотреть функцию, созданную с помощью

print(colwise.print.class)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...