【问题标题】:how to perform log10 transform on specific columns by a condition in R如何通过 R 中的条件对特定列执行 log10 转换
【发布时间】:2017-01-31 10:24:13
【问题描述】:

May数据集是这样的:

d <- read.table('age.txt', header = F,sep=' ')

 V1   V2  V3       V4   V5    V6        V7       V8       V9         V10
1 101 12  3.531704 16.0 40.8  1.449648  1.080353 20.85738 74.53056   0
2 102 15 -9.000000 24.0 36.4 -9.000000 -9.000000 -9.00000 -9.00000   0
3 103 13  3.306023 26.2 48.4  2.178820  1.349228 22.51904 72.82571   2.3
4 104 12  2.715226 18.2 42.6  2.343138  1.414314 23.13632 72.73414   4.5

我需要对第 6:10 列执行 log10 转换,但仅限于不等于 0 或 -9 的值。好吧,我试过这个:

if(d[,6:10]!=-9 || 0){d[,6:10]=log10(d[,6:10])}

但它不起作用。如果有人能帮忙谢谢。

【问题讨论】:

    标签: r database conditional


    【解决方案1】:

    一种选择是遍历 6:10 的列,获取不是 0 或 -9 的元素的索引,对这些元素应用 log10 并返回 vector

    d[6:10] <-  lapply(d[6:10], function(x)  {
                     i1 <- !x %in% c(0, -9)
                     x[i1] <- log10(x[i1])
                     x} ) 
    

    或者另一种选择是创建一个逻辑矩阵 ('i1') 子集列中的元素并使用 log10 进行更新

    i1 <- d[6:10]!=0 & d[6:10] != -9
    d[6:10][i1] <- log10(d[6:10][i1])
    

    【讨论】:

      【解决方案2】:

      log2 还是 log10?

      m <- as.matrix(df[6:10])
      df[6:10] <- ifelse(m > 0, log10(m), m)
      

      【讨论】:

        猜你喜欢
        • 2014-11-29
        • 2020-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-26
        • 1970-01-01
        相关资源
        最近更新 更多