【问题标题】:How to apply a function to a column in R data frame and store output in one dataframe如何将函数应用于 R 数据框中的列并将输出存储在一个数据框中
【发布时间】:2016-12-08 16:50:01
【问题描述】:

我有一个这样的数据框

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

现在我需要找出“a”列中绝对值

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

【问题讨论】:

  • 那么你想要的实际输出是什么?您的示例输出 data.frame 不是很清楚。
  • 我已经编辑了答案(带有虚拟值)。希望它更清楚。
  • 这些实际上是否对应于您提供的示例输入数据? “n”和“% in range”是否应该是 data.frame 中的列和列标题?这纯粹是为了演示吗?
  • so n 是函数中的一个变量,将应用于 df 列 'a',以确定 col 'a' 值的哪些百分比在 n 值的范围内。只要 n 和 % 的输出可以在一个数据帧或列表中,格式无关紧要。谢谢。

标签: r loops dataframe apply


【解决方案1】:

对于列表结果:

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)

【讨论】:

    【解决方案2】:

    这是一个返回数据框的方法

    # 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)
    

    【讨论】:

    • 感谢伊莫。我可以用折线图或条形图绘制输出吗?
    【解决方案3】:

    这样的东西可以给你一个矢量输出

    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
    

    【讨论】:

      猜你喜欢
      • 2020-02-12
      • 2021-07-11
      • 1970-01-01
      • 1970-01-01
      • 2019-09-09
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      相关资源
      最近更新 更多