循环或应用以在df中为每个现有列生成新列中的百分位值

时间:2018-01-30 20:19:31

标签: r loops iteration percentile

我希望在发行版中产生一个"百分位数"每个现有列的列。

我不确定如何为单个系列生成此百分位列。

#generate data
df <- data.frame(rnorm(100, 3, 1.2),
                     rnorm(100, 2, 0.5),
                     rnorm(100, 4, 1.5),
                     rnorm(100, 5, 0.2),
                     rnorm(100, 6, 0.7))
    colnames(df) <- c('a', 'b', 'c', 'd', 'e')

#failed attempt to generate new column
df$a_pct <- sapply(df$a, function(x) ecdf(x))

2 个答案:

答案 0 :(得分:1)

你必须使用ecdf吗?只是做:

sapply(df, function(x) rowMeans(outer(x, x, `>`)))

答案 1 :(得分:1)

System.argv/0的值返回一个函数。

$ cat a.exs
IO.inspect System.argv
$ elixir a.exs foo bar
["foo", "bar"]

要获得百分位数,请在值上应用函数,即

ecdf

对于多列,使用str(ecdf(df$a)) #function (v) #- attr(*, "class")= chr [1:3] "ecdf" "stepfun" "function" #- attr(*, "call")= language ecdf(df$a)

遍历列
ecdf(df$a)(df$a)