您好我正在尝试创建一个将接收数据帧的函数,并返回给定列的唯一值的数量。我设法将数据集转换为我喜欢的输出格式,但我似乎无法重命名其中一列(如输出中所示)。您对如何执行此操作有任何想法吗?我已尝试在as.data.frame中提供列名,但这样做无效。在查看数据框之后,它似乎应该使用fix.empty names参数,但即使在提供它之后,它似乎仍然给我一个空列名称(请参阅输出)。我认为这可能与此修复有关,但我不确定... http://r.789695.n4.nabble.com/Data-frame-printing-buglet-when-multiple-empty-column-names-td4718088.html感谢您的时间。
#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 :(得分: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)
的输出作为实际列,则只需在函数中追加。
答案 1 :(得分:0)
这是我为那些感兴趣的人提出的最终代码:
据我所知,并非每个人都通过&lt;&lt; - 来全面分配全局,但我认为它简化了函数的输入,使代码更具可读性。
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