【问题标题】:Assigning content of a R dataFrame cell based on some conditions [duplicate]根据某些条件分配R dataFrame单元格的内容[重复]
【发布时间】:2016-02-23 18:25:52
【问题描述】:

我有一个 R DataFrame df,内容如下:

Serial N         year         current
   B              10            14
   B              10            16
   C              12            11
   D              40            20
   B              11            15
   C              12             9

如果序列号和年份是相同的序列号和年份,我想添加一个计算平均电流的列。 我想要这样的东西

Serial N         year         current    Average 
   B              10            14          15
   B              10            16          15
   C              12            13          12
   D              40            20          20
   B              11            15          15
   C              12            11          12

这是我写的

for (i in unique(df$Serial_N))
   {
       for (j in unique (df$year))
         {  data=subset(df,Serial_N==i & year==j)   
            df$Average<-mean(data$current)  
          }
    }     

当我运行它时,我有以下错误

Error in `$<-.data.frame`(`*tmp*`, "Average", value = NaN) : 
replacement has 1 row, data has 0 

什么是问题?我该如何解决?

【问题讨论】:

  • 你是如何得到 D 的平均值为 40 的?
  • transform(df, Avg = ave(current, Serial_N, year))?
  • 好的,所以您再次更改了输出。我得到了你的新输出。
  • 我很抱歉这个错误。确实是 20 而不是 40
  • 你是如何获得12 的平均水平的?

标签: r


【解决方案1】:

我们可以使用data.table。将'data.frame'转换为'data.table'(setDT(df)),按'SerialN'和'year'分组,我们得到'current'的mean并将其分配给新列'Average' .

library(data.table)
setDT(df)[, Average := mean(current) ,.(SerialN, year)]

【讨论】:

  • 这是我得到的:找不到函数“setDT”
  • @user3841581 抱歉,我没有指定库。使用install.packages('data.table')安装后,您必须致电library(data.table)
  • 我安装了它,它似乎工作。谢谢
  • 对不起,我以为它被标记为重复
  • 完美运行。非常感谢
猜你喜欢
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-01
  • 2016-10-14
相关资源
最近更新 更多