r - 将行中的所有元素与行中的最大值相除 - 更快的方法

标签 r

我需要缩放 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 行:忽略
enter image description here

最佳答案

根据描述,我们只需要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/

相关文章:

r - 用长度相等或更大的字符串有效地替换固定位置的子字符串

调整大小 R ggplotly

R:使用 TLS/SSL 安全下载数据

r - 迭代字符串列表以获取字数

R:根据列添加两个不同维度的矩阵

r - 如何递归合并列表列表的相应元素

R 将矩阵或数据框转换为 sparseMatrix

r - 查找组内超出阈值的点数

r - 当 output_dir 包含空格时,使用 Rmarkdown 生成 PDF 文档时出错

r - 从字符向量创建自定义词典