Das mag trivial, aber ich habe einen Code, der den Durchschnitt der nächsten zwei Zahlen in einem Satz von drei Zahlen findet. So 5 Beispiele:Finden Sie den nächsten Durchschnitt von drei Zahlen - Code-Optimierung
x1 <- c(1,5,7)
x2 <- c(NA,2,3)
x3 <- c(2,6,4)
x4 <- c(1,NA,NA)
x5 <- c(1,3,1)
würde ich jeweils eine Leistung von
y1 = 6
y2 = 2.5
y3 = 4
y4 = 1
y5 = 1
bekommen. Im Grunde, die nächsten 2 Zahlen zu finden, dann sie zu mitteln, NA und Verbindungen betreffend.
Dieser Code ist eine Ungeheuerlichkeit:
x <-x[!is.na(x)]
x <-x[order(x)]
y <-ifelse(length(x) == 1, x,
ifelse(length(x) == 2, mean(x),
ifelse(length(x) == 3,
ifelse(abs(x[1] - x[2]) == abs(x[2] - x[3]), mean(x),
ifelse(abs(x[1] - x[2]) > abs(x[2] - x[3]), mean(x[2:3]),
ifelse(abs(x[1] - x[2]) < abs(x[2] - x[3]), mean(x[1:2]),
"error"))), NA)))
Es funktioniert, aber da dies Teil einer größeren for
Schleife ist, ich habe mich gefragt, gibt es einen besseren Weg, dies zu tun ..
funktioniert nicht für 'x3 <- c (2,6,4)' – rbm
ja, aber das ist nicht das, was das Tun des OP: 'abs (x [1] - x [2]) == abs (x [2] - x [3]), mittel (x) ' – rbm
OK. Habe überarbeitet. –