对于虹膜数据:
i <- iris[,1:4] # numerical variables in Iris-data
ord_i <- order(i[,1]) # order data frame by variable 1 ascending order
low_i <- lowess(i[ord_i,1], f=1/10)[2] # compute lowess for ordered variable 1
i[ord_i,1] <- low_i # insert new values to original data
成功。我试过并将其概括为一个函数:
func1 <- function(x){
func1_aux <- function(x,y){
ord_x <- order(x[,y])
low_y <- lowess(x[ord_x, y], f=1/10)[2]}
apply(x, 2, func1_aux)}
func1(i)
Error in x[, y] : incorrect number of dimensions
我怀疑问题在于变量名称y和数据框x的来源 从申请到func1_aux。
任何建议如何解决这个或更聪明的方式来完成任务?谢谢!
答案 0 :(得分:0)
我不清楚为什么要这样做,但是这里有一种方法可以对数据框的每一列进行独立排序并使其平滑:
i <- iris[, 1:4]
k <- apply(i, 2, function(x) lowess(x[order(x)], f=1/10)[[2]][match(x, x[order(x)])])
使用双括号[[2]]
确保结果k
是矩阵而不是列表。虽然这种方法对于每个独立排序的列都很平滑,但为了使结果保持与原始数据框i
相同的顺序,您需要“取消”它。这就是代码的[match(...)]
部分正在做的事情。