繁体   English   中英

在数据框中的3列上应用函数只会返回一列

[英]Applying a function across 3 columns in a data frame only returns one column

我正在尝试使用下面编写的函数对数据框中的所有列进行规范化。 当我尝试使用下面的for循环将其应用于所有列时,当我期望三列时,输出仅返回一列。 输出正确归一化,表明函数可以正常工作,并且for循环是问题。

seq_along(df)返回相同的输出

### example df

df <- cbind(as.data.frame(c(2:12), c(3:13), c(4:14)))

### normalization function
rescale <- function(x) {    
  (x - min(x, na.rm = TRUE)) / (max(x, na.rm = TRUE) - min(x, na.rm = TRUE))    
}


### for loop that returns one column although properly normalized

for (i in 1:ncol(df)){      
  i <- df[[i]]  
  output <- as.data.frame(rescale(i))
}

as.data.frame的语法是as.data.frame(x, row.names = NULL, optional = FALSE, ...) 这意味着在调用as.data.frame(c(2:12), c(3:13), c(4:14)) c(3:13)被分配给参数row.namesc(4:14)椭圆 这意味着您的data.frame只有一列:2: 2:12

正确的版本应为: df <- as.data.frame(cbind(c(2:12), c(3:13), c(4:14))) 当然,您应该使用函数scale而不是自己编写

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM