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])}
但它不起作用。如果有人可以帮助谢谢。
答案 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])