2016-08-11 6 views
-2

Здравствуйте, я пытаюсь создать функцию, которая будет принимать в dataframe, и вернет мне количество уникальных значений для данного столбца. Мне удалось получить набор данных в формате вывода, который мне нравится, но я не могу переименовать один из столбцов (как указано в выводе). У вас есть какие-то мысли о том, как это сделать? Я попытался указать имена столбцов в as.data.frame, и это не сработало. Посмотрев на фреймворк данных, кажется, что он должен использовать аргумент fix.empty names, но даже после его поставки он все равно дает мне пустое имя столбца (см. Вывод). Я думаю, что это может иметь какое-то отношение к этому исправлению, но я не уверен ... http://r.789695.n4.nabble.com/Data-frame-printing-buglet-when-multiple-empty-column-names-td4718088.html Спасибо за ваше время.Переименовать пустой столбец в dataframe

#Function to Find unique values in a dataframe 
library(knitr) 
library(formattable) 
findUniqueVals <- function(df) { 
    poop <- sapply(df, function(x) length(unique(x))) 
    poop <- as.data.frame(poop, fix.empty.names==TRUE) 
    kable(poop) 
    #formattable::formattable(poop) 
} 
findUniqueVals(patientdata) 
#should have a column header not just empty string 
Output: 
|    | poop| 
|:------------|----:| 
|patient.ID | 4| 
|patient.name | 4| 
|Adm.Date  | 4| 
|diabetes  | 2| 
|p.status  | 3| 

#testdata 
patient.ID <- c(1, 2, 3, 4) 
patient.name <-c("pat1", "pat2", "pat3","pat4") 
Adm.Date <- as.POSIXct(c('2010-10-11','2008-3-25','2016-4-23','2011-6-12')) 
diabetes <- c("Type1", "Type2", "Type1", "Type2") 
p.status <- c("Poor", "Improved", "Excellent", "Poor") 
patientdata <- data.frame(patient.ID,patient.name,Adm.Date,diabetes,p.status) 
+0

Как насчет например, 'colnames (poop) [1] <-" Столбец 1 "'? – Billywob

+0

Я получаю сообщение об ошибке «> colnames (poop) [1] <-" test " Ошибка в' colnames <-' ('* tmp *', value = "test"): попытка установить 'colnames' on объект с менее чем двумя измерениями ». – petergensler

+1

Здравствуйте. @Billywob прав: 'colnames()' обычно выполняет эту работу. Если это не для вас, попробуйте указать [Минимальные, завершенные и проверенные примеры] (http://stackoverflow.com/help/mcve), которые выдают ту же самую ошибку. Это улучшит вероятность получения полного ответа. – symbolrush

ответ

0

Это окончательный код, который я придумал для тех, кто заинтересован:

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

createmydf <- function(df) { 
    #Create DF with column names 
    #1.- Fill Data Frame Row name column with a vector of Column names 
    #2.- Fill TCount with a vector of counts 
    #3.- Display results using formattable 
    x <<- data.frame("Row Name"= numeric(0), "TCount"=numeric(0)) 
    result <- sapply(df, function(x) length(unique(x))) 

    #Now Create the Row names 
    for (i in 1:length(colnames(df))) { 
    x[i,1] <<- (names(result[i])) 
    x[i,2] <<- result[[i]] 
    } 
    return(x) 
} 

соответствующих результатов будет выводиться следующим образом:

 Row.Name TCount 
1 patient.ID  4 
2 patient.name  4 
3  Adm.Date  4 
4  diabetes  2 
5  p.status  3 
1

Я думаю, что проблема в том, что вы не возвращает какой-либо объект, используя функцию, и объект, на poop внутри кадра данных 5 по 1. Чтобы увидеть это использовать: например

findUniqueVals <- function(df) { 
    poop <- sapply(df, function(x) length(unique(x))) 
    poop <- as.data.frame(poop) 
    #formattable::formattable(poop) 
    #kable(poop) commented this out because I don't have access to the package 

    return(poop) # returning the actual object 
} 

poop <- findUniqueVals(patientdata) 
dim(poop) 
colnames(poop) 
rownames(poop) 

Если вы хотите, чтобы выход из rownames(poop) как фактической колонки можно просто добавить в функции.

+0

Когда я пытаюсь изменить имена строк, я получаю эту ошибку: row.names (poop) <- c ("test1", "Test2") Ошибка в 'rownames <-' (x, value) : попытка установить 'rownames' на объекте без измерений – petergensler

Смежные вопросы