この質問で、ここで始まった議論を補足したいと思います
特定の範囲を 1 つずつ更新する必要があるデータ フレームを含むリストがあります。「一度に1つ」の要件により、ここで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
ここで、行 3 と 4 を確認するために、b
列のNA を$d2
前年の値で変更したいとします2006
。リンクされたディスカッションに続いて、コードを使用してそれを行うことができると思いました。
my.ls[["d2"]][,is.na(b)]<-2006
しかし、私は間違っていました。b
R は、オブジェクトが見つからないというエラーを報告します。ここでの問題は、論理条件を使用してリスト内のデータ フレーム範囲を参照する方法を理解することだと思います。
いつものように、解決策は頭で考えているよりもはるかに簡単かもしれません...