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%
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%
下面是返回一個數據幀
# 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)
或者使用dotchart
:
dotchart(myPropVec)
的數據幀:
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)
像這樣的東西可以工作給予你一個矢量輸出
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
那麼你希望的實際輸出是什麼?您的示例輸出data.frame不是很清楚。 – MrFlick
我編輯了答案(帶有虛擬值)。希望它更清晰。 – santoku
這些實際上是否與您提供的示例輸入數據相符? 「n」和「範圍內的%」是否應該是data.frame中的列和列標題?這純粹是爲了演示嗎? – MrFlick