如何通过R

时间:2016-09-22 17:58:47

标签: r database conditional

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])}

但它不起作用。如果有人可以帮助谢谢。

2 个答案:

答案 0 :(得分:3)

log2或log10?

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

答案 1 :(得分: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} ) 

或另一种选择是创建逻辑矩阵(&#39; i1&#39;)对列中的元素进行子集化,并使用log10

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