2016-12-08 4 views
0

У меня есть кадр данных, как этотКак применять функцию столбца в кадре R и вывода данных магазина в одном dataframe

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

Теперь мне нужно, чтобы выяснить, какой% от значений в столбце «а» которые имеют абсолютное значение < п, п является переменной: 10, 20, 30, 40, 50, и выводят результат в кадр данных, как этот

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

Итак, каков фактический результат, который вы желаете? Ваш пример output data.frame не очень ясен. – MrFlick

+0

Я отредактировал ответ (с фиктивным значением). надеюсь, что это яснее. – santoku

+0

Действительно ли они соответствуют примерным входным данным, которые вы предоставили? «N» и «% in range» должны быть заголовком столбца и столбца в data.frame? Это чисто для презентации? – MrFlick

ответ

1

Вот способ вернуть кадр данных

# 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 

Это еще проще вернуть именованный вектор с той же информацией.

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 

Несложно построить названный вектор в виде гистограммы:

barplot(myPropVec) 

enter image description here

Или с помощью dotchart:

dotchart(myPropVec) 
+0

спасибо Имо. В любом случае, я могу построить вывод на линейной или гистограмме? – santoku

+1

См. Мой обновленный ответ. – lmo

2

для результата списка:

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

для кадра данных:

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

Что-то подобное может работать, чтобы дать вы векторный выход

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