2016-12-08 73 views
0

我有這樣如何將功能適用於R數據幀和存儲輸出列在一個數據幀

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

數據幀現在我需要弄清楚的值是多少%列「A」具有絕對值< n,並且n是一個可變的:10,20,30,40,50,並把結果輸出到用於列表結果這樣

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

那麼你希望的實際輸出是什麼?您的示例輸出data.frame不是很清楚。 – MrFlick

+0

我編輯了答案(帶有虛擬值)。希望它更清晰。 – santoku

+0

這些實際上是否與您提供的示例輸入數據相符? 「n」和「範圍內的%」是否應該是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