2016-09-22 3 views
2

Mai-Datensatz ist wie diese Transformation auszuführen:wie log10 auf bestimmte Spalten durch eine Bedingung in R

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 

und ich brauche log10 auf Spalte 06.10, sondern nur für die Werte Transformation durchzuführen, die nicht gleich 0 oder -9. Nun, ich habe es versucht:

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

aber es hat nicht funktioniert. Wenn jemand helfen kann, danke.

Antwort

1

Eine Option wäre, die Spalten 6:10 durchzugehen, den Index der Elemente zu erhalten, die nicht 0 oder -9 sind, die log10 auf diese anzuwenden und die vector zurückzugeben.

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

Oder eine andere Option wäre eine logische Matrix ('i1') aus den Spalten und aktualisieren die Elemente mit dem log10

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

log2 oder log10 Subset zu erstellen?

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