我正在尝试自动创建一个新的数据框,在给定现有数据框的情况下,该数据框包含数值变量的中值或者因子的最常见类别。所以:
Number Factor
3 A
2 A
5 B
应该变成
Number Factor
3 A
我可以单独为每个变量计算它。对于纯数值变量,我甚至可以使用colMeans命令。对于纯粹的因子变量,我会使用which.max()。但我无法将这两者合并为可扩展的灵活解决方案
答案 0 :(得分:2)
您可以lapply
使用if
分支:
y <- read.table(text = "Number Factor
3 A
2 A
5 B", header = TRUE)
as.data.frame(lapply(y, function(x) {
if (is.numeric(x)) return (median(x))
else return(x[which.max(table(x))])
}))
答案 1 :(得分:1)
你可以测试类似的东西:
FUN <- function(x) {
if (is.numeric(x))
return(median(x))
else
x <- sort(as.character(x))
rl1 <- rle(x)
rl1$val[which.max(rl1$le)]
}
as.data.frame(lapply(tab, FUN))
aggregate(tab, by=list(gl(1,nrow(tab))), FUN=FUN)
# even easier
bob <- lapply(tab, function(x) if(is.numeric(x)) median(x) else x[median(as.numeric(x))])
as.data.frame(bob)
答案 2 :(得分:1)
as.data.frame( lapply(dfrm, function(x) if(is.numeric(x)) {
median(x) } else {
names(sort( table(x) , decreasing=TRUE )[1])
})
)