【问题标题】:R: add different values to columns within a list of dataframesR:向数据框列表中的列添加不同的值
【发布时间】:2011-08-19 16:03:24
【问题描述】:

如果我有这样的列表:

list <- list( "1" = data.frame(time=1:3, temp = sample(11:13)),
              "3" = data.frame(time=1:3, temp = sample(11:13)))

list

$`1`
  time temp
1    1   11
2    2   12
3    3   13

$`3`
  time temp
1    1   11
2    2   12
3    3   13

现在我想为 temp 列添加一个校正值,数据帧 1 为 +1,数据帧 3 为 -1,因此结果将是:

$`1`
  time temp
1    1   12
2    2   13
3    3   14

$`3`
  time temp
1    1   10
2    2   11
3    3   12

另外假设我有多个这些列表,有时可能缺少数据帧 3 或 1,甚至可能包含数据帧 2,这需要它自己的校正因子... 我为数据框 1 尝试了奇怪的事情:

list <- lapply(list, function(x)   {x <- x$"1"$temp-1;x})

list <- lapply(list, function(x)   {x <- x[x$temp+1,];x})

还尝试为列表中的其他数据框添加 seq_along...没有任何效果,可能是因为我不太了解语法的工作原理...

【问题讨论】:

  • 在投反对票之前,我会给他们一个很好的机会来编辑明显是混乱的东西......耐心!
  • 好的,我等待完整的问题。但这仍然太模棱两可,无法回答。构建一个实际代表您的全部问题的可重现示例。
  • 如果这个数据都是一样大小的,最好把它存成data.frame(),这样肯定会简化操作。如果您想要一种快速而肮脏的方式来转换回 data.frame,您可以使用 plyr 包中的 df

标签: list r add dataframe


【解决方案1】:

我将数据结构的名称更改为 dflist。将列表称为“列表”是错误的。您还需要一些数据结构来提取相关的校正因子,所以让我们假设一个与“dflist”同名的数据结构:

dflist <- list( "1" = data.frame(time=1:3, temp = sample(11:13)),
              "3" = data.frame(time=1:3, temp = sample(11:13)))

corrlist <- list("1" = 1, "3"=-1) 

# Replaced lapply with for loop
for( nam in names(dflist)) {
        dflist[[nam]]['temp'] <- dflist[[nam]]['temp'] +corrlist[[nam]]
                            }
 dflist

【讨论】:

  • 完美,谢谢!除了末尾缺少括号 - 它会删除/覆盖数据帧的名称/编号。而不是 $1 和 $3,数据帧用 [[1]] 和 [[2]] 标记。如果我 return(dflist[x]) 名字留下来,而且那些 [[1]] 也加倍 O_o
  • 括号在那里(增加了强调的空间)但是缺少一个括号,你关于我返回的内容的观点很好。应该刚刚返回 dflist。
  • 但其他问题依然存在。需要改进。
  • 感谢循环。看起来应该可以工作......不幸的是我也无法弄清楚错误在哪里......
  • 我没有收到该代码的错误。您的 R 安装是否已损坏?
猜你喜欢
  • 2014-06-03
  • 1970-01-01
  • 1970-01-01
  • 2022-08-13
  • 2021-06-06
  • 2019-03-21
  • 2021-10-11
  • 1970-01-01
  • 2017-04-26
相关资源
最近更新 更多