有了这个问题,我想补充从这里开始的讨论
我有一个列表,其中包含我需要一次更新一个特定范围的数据框。我认为“一次一个”的要求使得 lapply 在这里很难使用——但如果我错了,请纠正我。
让我提出以下例子来澄清。
set.seed(1)
d1<-data.frame(a=rnorm(5), b=c(rep(2006, times=4),NA), c=seq(from=22, to=30, by=2))
d2<-data.frame(a=1:5, b=c(2007, 2007, NA, NA, 2007), c=11:15)
d3<-data.frame(a=12:16, b=c(NA, NA, NA, 2008, 2008), c=21:25)
my.ls<-list(d1=d1, d2=d2, d3=d3)
my.ls
$d1
a b c
# 1.5117812 2006 22
# 0.3898432 2006 24
# -0.6212406 2006 26
# -2.2146999 2006 28
# 1.1249309 NA 30
$d2
a b c
# 1 2007 11
# 2 2007 12
# 3 NA 13
# 4 NA 14
# 5 2007 15
$d3
a b c
# 12 NA 21
# 13 NA 22
# 14 NA 23
# 15 2008 24
# 16 2008 25
现在,假设我想用前一年的值更改b
列中的 NA,以便在第 3 行和第 4 行中看到。在链接讨论之后,我认为我可以使用代码做到这一点,$d2
2006
我的.ls[["d2"]][,is.na(b)]<-2006
但是我错了。R 报告一个错误,指出b
找不到对象。我认为这里的问题是了解如何使用逻辑条件引用列表中的数据帧范围。
像往常一样,解决方案可能比我想象的要容易得多......