2017-08-22 1 views
1

Ich frage mich, ob es möglich ist, eine Wildcard-Funktion in R zu verwenden, um bestimmte Werte in einem Datenrahmen zu ersetzen?R Potential Wildcard zum Ändern numerischer Werte

Also, wenn ich Werte von c(10.32, 10.34, 10.35, 10.45, 10.56) hätte, würde ich eine Funktion wie die alle Werte mit XX.X5-XX.X4 ersetzen würde (das heißt 10.45 -> 10.44 oder 10.35 -> 10.34).

Gibt es eine Ersatzfunktion, die dafür funktioniert?

Antwort

0

Ich bin mir nicht sicher, was Sie mit Wildcard meinen. Wenn Sie nur eine Spalte aus einem Datenrahmen skalieren möchten (dh eine Konstante davon subtrahieren), dann ist das bei der vektorisierten Natur von R sehr einfach.

df$x <- df$x - .01 

Die Mutate-Funktion von dplyr würde auch funktionieren. Wenn Sie nur einige der Zeilen skalieren möchten, dann ist die ifelse Funktion ist auch sehr einfach zu bedienen:

df$x <- ifelse(df$x<11 && df$x>10, df$x-.01, df$x) 
0

Hier ist eine Idee,

n <- nchar(x/5) == 4 
x[n] <- x[n] - 0.01 
x 
#[1] 10.34 10.44 10.56 
2

Sie gsub verwenden können:

dat <- as.numeric(gsub("5$", "4", dat)) 

# [1] 10.32 10.34 10.34 10.44 10.56 

Update:

01 Diese

ist eine andere Lösung ohne Umwandlung der Daten in Zeichen:

dat[round(dat %% 0.1,2) == 0.05] <- dat[round(dat %% 0.1,2) == 0.05] - 0.01 

Daten:

dat <- c(10.32, 10.34, 10.35, 10.45, 10.56) 
+0

Das ist genau das, was ich gesucht habe - vielen Dank! – AndrewVBA

+1

@AndrewVBA Bitte lesen Sie [Was soll ich tun, wenn jemand meine Frage beantwortet?] (Https://stackoverflow.com/help/someone-answers) – Masoud

Verwandte Themen