2016-12-08 3 views
0

ich einen Datenrahmen wie dieseWie eine Funktion auf eine Spalte in R-Datenrahmen und Speicherausgang in einem Datenrahmen

set.seed(12) 
df=data.frame(a=runif(20,-100,100),b=rep(c("a","b"),10)) 

Jetzt muss ich herausfinden, was% der Werte in Spalte anzuwenden ‚a‘ die haben absoluten Wert < n, und n ist eine Variable: 10, 20, 30, 40, 50, und gibt das Ergebnis in einen Datenrahmen wie diese

n    10 20 30 40 50 
% in the range 12% 14% 27% 40% 50% 
+0

Also was ist der tatsächliche Ausgang, den Sie wünschen? Ihre Beispielausgabe data.frame ist nicht sehr klar. – MrFlick

+0

Ich habe die Antwort bearbeitet (mit Dummy-Wert). hoffe es ist klarer. – santoku

+0

Entsprechen diese tatsächlich den von Ihnen bereitgestellten Beispieldaten? Sind "n" und "% in range" ein Spalten- und Spaltenkopf im data.frame? Ist das nur zur Präsentation gedacht? – MrFlick

Antwort

1

Hier ist ein Verfahren ein Datenrahmen

# get a named vector of values 
myValues <- setNames(seq(10, 50, 10), seq(10, 50, 10)) 
# return result 
data.frame(lapply(myValues, function(x) sum(abs(df$a) < x)/nrow(df))) 
X10 X20 X30 X40 X50 
1 0.1 0.15 0.35 0.4 0.5 

Noch einfacher ist es zurückzukehren einen benannten Vektor mit den gleichen Informationen zurückzukehren.

myPropVec <-sapply(myValues, function(x) sum(abs(df$a) < x)/nrow(df)) 
myPropVec 
    10 20 30 40 50 
0.10 0.15 0.35 0.40 0.50 

Es ist einfach, den benannten Vektor als Balkendiagramm zu zeichnen:

barplot(myPropVec) 

enter image description here

Oder dotchart mit:

dotchart(myPropVec) 
+0

danke Imo. Kann ich die Ausgabe in einer Linie oder einem Balkendiagramm darstellen? – santoku

+1

Siehe meine aktualisierte Antwort. – lmo

2

für eine Liste Ergebnis:

n <- seq(10,50, by = 10) 
list <- lapply(n, function(x) percent(sum(abs(df$a) < x)/nrow(df))) 
setNames(list, n) 

für einen Datenrahmen:

df <- do.call(rbind, list) 
1

So etwas geben könnte arbeiten, um Sie einen Vektor-Ausgang

n<-seq(10,50,10) 

perc<-vector() 

for(i in 1:5) {perc[i]<-sum(abs(df$a)<n[i])/length(df$a)} 

perc 
[1] 0.10 0.15 0.35 0.40 0.50 
Verwandte Themen