Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中循环一个序列(标准化和winsorize数据帧)_R_Loops_Dataframe_Standardized - Fatal编程技术网

在R中循环一个序列(标准化和winsorize数据帧)

在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[

我试图在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[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