在R中循环一个序列(标准化和winsorize数据帧)
我试图在r中为一个数据帧循环这一系列步骤。 以下是我的数据:在R中循环一个序列(标准化和winsorize数据帧),r,loops,dataframe,standardized,R,Loops,Dataframe,Standardized,我试图在r中为一个数据帧循环这一系列步骤。 以下是我的数据: ID Height Weight a 100 80 b 80 90 c na 70 d 120 na .... 这是到目前为止我的代码 winsorize2 <- function(x) { Min <- which(x == min(x)) Max <- which(x == max(x)) ord <- order(x) x[
ID Height Weight
a 100 80
b 80 90
c na 70
d 120 na
....
这是到目前为止我的代码
winsorize2 <- function(x) {
Min <- which(x == min(x))
Max <- which(x == max(x))
ord <- order(x)
x[Min] <- x[ord][length(Min)+1]
x[Max] <- x[ord][length(x)-length(Max)]
x}
df<-read.csv("data.csv")
df2 <- scale(df[,-1], center = TRUE, scale = TRUE)
id<-df$Type
full<-data.frame(id,df2)
full[is.na(full)] <- 0
full[, -1] <- sapply(full[,-1], winsorize2)
winsorize2有些边界问题没有在代码中完全指定,但可能可以使用以下方法(使用base R,但效率不高)
wins2对不起,我的意思是如何循环标准化和winsorizing?ie标准化,然后winsorize。然后标准化winsorized分数,然后再次winsorized分数。你完全正确!我确实需要一个边界。如何将平均值大于+/-3 sd的替换为3?p、 我应该编辑我的问题吗?很抱歉,这是新的。感谢您的代码,因为原始数据中的最小值在标准化后仍然是最小的,所以标准化没有任何意义。你基本上是在等级上工作,也许你只是想在最后一次跑步后实现标准化?也许试着重新表述这个问题,这样也可以显示输出应该是什么?谢谢你回复我!我试图给这些值分配一个从0到100的分数,50是平均值。我还试图强迫这些值服从正态分布,如果这有意义的话?至于输出,我在excel中手动完成,我添加到原始问题中的编辑代码似乎给出了类似的结果。所以我只是想复制“winsorized分数标准化”和“winsorized”序列10次。谢谢
df<-read.csv("data.csv")
id<-df$Type
df2<- scale(df[,-1], center = TRUE, scale = TRUE)
df2[is.na(df2)] <- 0
df2[df2<=-3] = -3
df2[df2>=3] = 3
df3<-df2 #trying to loop again
df3<- scale(df3, center = TRUE, scale = TRUE)
df3[is.na(df3)] <- 0
df3[df3<=-3] = -3
df3[df3>=3] = 3
wins2 <- function(x, n=1) {
xx <- sort(unique(x))
x[x<=xx[n]] <- xx[n+1]
x[x>=xx[length(xx)-n]] <- xx[length(xx)-n]
x
}
x <- 1:11
wins(x,1)
[1] 2 2 3 4 5 6 7 8 9 10 10
wins(x,3)
[1] 4 4 4 4 5 6 7 8 8 8 8