我有一个像这样的数据框
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 :(得分: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 :(得分: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)
或使用dotchart
:
dotchart(myPropVec)
答案 2 :(得分: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