我需要缩放 dataframe
.
我需要遵循的过程如下:
Divide all elements in a row with the max number in that row, unless that row contains number 1
我使用这种方法:
post_df <- df # original dataframe
for(i in 1:nrow(df)){
if (! 1 %in% df[i,]) {
post_df[i,] <- df[i,]/max(df[i,])
}
}
我想知道是否有一种更快的方法可以减少几秒钟的时间,因为我在一个大数据帧中运行它 86000 rows *500 cols
.例如
5 行,5 列
第 1 行:将所有元素除以 0.7
第 2 行:将所有元素除以 0.4
第 3 行:忽略
第 4 行:忽略
第 5 行:忽略
最佳答案
根据描述,我们只需要scale
那些没有 1 的行。基于 rowSums
创建一个逻辑索引 ('i1')然后使用“i1”对数据集进行子集化,得到 max
每行的 pmax
, 与子集相除并分配回子集
i1 <- !rowSums(df==1)>0
df[i1,] <- df[i1,]/do.call(pmax, df[i1,])
数据
set.seed(24)
df <- as.data.frame(matrix(sample(1:8, 10*5, replace = TRUE), ncol=5))
关于r - 将行中的所有元素与行中的最大值相除 - 更快的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46953015/