在数据框列表中,向列添加不同的值

3
如果我有一个列表,如下所示:
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列添加校正值,dataframe 1添加+1,dataframe 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...但是什么都没起作用,可能是因为我不太理解语法是如何工作的...


2
在我下投票之前,我会给他们一个很好的机会来编辑明显的错误...耐心点! - joran
好的,我等待完整的问题。但是这个问题仍然过于模糊,无法回答。请构建一个可重现的示例,确实代表您的全部问题。 - joran
如果这些数据都是相同大小的,最好将其存储为data.frame(),这肯定会简化操作。如果您想要一种快速而简单的方法将其转换回data.frame,则可以使用plyr包中的df <- ldply(mylist)。 - Brandon Bertelsen
1个回答

2

我将数据结构的名称更改为dflist。称列表为“list”是不正确的。您还需要一些数据结构来引入相关的校正因子,所以让我们设定一个与“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]]和[[2]],而不是$1和$3。如果我使用return(dflist[x]),名称会保留,但那些[[1]]也会加倍O_o。 - Thomas Langkamp
括号已经存在(添加了空格以强调),但是缺少一个右括号,你提到的我返回的内容很有道理。应该只返回dflist。 - IRTFM
但是其他问题仍然存在。需要改进。 - IRTFM
感谢您的循环。看起来应该可以工作...不幸的是,我也无法找出错误在哪里... - Thomas Langkamp
我在这段代码中没有发现错误。你的 R 安装是否损坏了? - IRTFM
哦,对不起,我的错。我写了一个 dflist <- for ...,因为我有点习惯这样做了...... 而且我误解了你的“问题仍然存在。需要改进。”是对循环的评论...... - 所以你是对的,它工作得很好 :D - Thomas Langkamp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接