【问题标题】:Adding a column to a dataframe in R将列添加到 R 中的数据框
【发布时间】:2010-09-06 13:02:30
【问题描述】:

我有以下数据框 (df)

 start     end
1    14379   32094
2   151884  174367
3   438422  449382
4   618123  621256
5   698271  714321
6   973394  975857
7   980508  982372
8   994539  994661
9  1055151 1058824
.   .       .
.   .       .
.   .       .

还有一个带有数值的长向量 (vec)。

我想在每一行中添加另一列,在vec 中相应位置的值的平均值。例如,第一行将有mean(vec[14379:32094])。我试过玩transform,但没能完成这个简单的任务。

【问题讨论】:

  • 我一只脚在办公室外,无法这么快地想出一个例子,但是 FWIW,请参阅 ?apply。

标签: r dataframe


【解决方案1】:

这是apply() 的一个非常标准的用例:

R> vec <- 1:10
R> DF <- data.frame(start=c(1,3,5,7), end=c(2,6,7,9))
R> DF$newcol <- apply(DF,1,function(row) mean(vec[ row[1] : row[2] ] ))
R> DF
  start end newcol
1     1   2    1.5
2     3   6    4.5
3     5   7    6.0
4     7   9    8.0
R> 

如果您愿意,也可以使用plyr,但这里没有真正需要超越基本 R 的功能。

【讨论】:

  • +1 谢谢!关于。 plyr - 如果我希望每一行都单独处理,我该如何使用它?
  • 你在说什么?这单独对待每个。否则它会怎么做?
  • 每个什么?据我了解,plyr 处理一组行。
【解决方案2】:

即使这是一个 7 年前的问题,R 新手也应该​​考虑使用 data.table, 包。

data.table 是一个 data.frame,因此您可以为/对 data.frame 做的所有事情,您也可以做。但许多人认为使用 data.table 可以提高 ORDERS 的速度。

vec <- 1:10
library(data.table)
DT <- data.table(start=c(1,3,5,7), end=c(2,6,7,9))
DT[,new:=apply(DT,1,function(row) mean(vec[ row[1] : row[2] ] ))]

【讨论】:

  • 不知道为什么我在这里被否决了......荒谬
猜你喜欢
  • 2014-12-28
  • 2020-08-02
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 2017-11-27
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多