隨後替換列值我有一個列表,「na.list」,包含23個數據幀:在數據幀基於條件的第一列
str(na.list)
List of 23
$ YFB:'data.frame': 4383 obs. of 8 variables:
..$ Obs : num [1:4383] 1 1 1 1 1 1 1 1 1 1 ...
..$ Day.1.AM: num [1:4383] 1 1 1 1 1 1 1 1 1 1 ...
..$ Day.2.AM: num [1:4383] 1 1 1 1 1 1 1 1 1 1 ...
..$ Day.3.AM: num [1:4383] 1 1 1 1 1 1 1 1 1 1 ...
..$ Day.4.AM: num [1:4383] 1 1 1 1 1 1 1 1 1 1 ...
..$ Day.5.AM: num [1:4383] 1 1 1 1 1 1 1 1 1 1 ...
..$ Day.6.AM: num [1:4383] 1 1 1 NA 1 1 1 1 1 1 ...
..$ Day.7.AM: num [1:4383] NA NA NA NA NA NA NA NA NA NA ...
$ YFC:'data.frame': 4383 obs. of 8 variables:
..$ Obs : num [1:4383] 1 1 1 1 1 1 1 1 1 1 ...
..$ Day.1.AM: num [1:4383] 1 1 1 1 1 1 1 1 1 1 ...
..$ Day.2.AM: num [1:4383] 1 1 1 1 1 1 1 1 1 1 ...
..$ Day.3.AM: num [1:4383] 1 1 1 1 1 1 1 1 1 1 ...
..$ Day.4.AM: num [1:4383] 1 1 1 1 1 1 1 1 1 1 ...
..$ Day.5.AM: num [1:4383] 1 1 1 1 NA 1 1 1 1 1 ...
..$ Day.6.AM: num [1:4383] NA NA NA NA NA NA NA NA 1 1 ...
..$ Day.7.AM: num [1:4383] NA NA NA NA NA NA NA NA NA NA ...
等等。我想要做的是用零替換所有的NA值。我這樣做是使用:
set.na<-function(x,y){replace(x[,y],is.na(x[,y]),0)}
na.list<-lapply(na.list,set.na,y=(1:8))
的問題是,如果第一列「觀測值」爲NA,那麼所有的後續列的應該是爲好。所以,我曾試圖做到以下幾點:
set.obs.na<- function(x,y){{replace(x[,y],is.na(x[,1]),0)}}
na.list<-lapply(all.dat,set.obs.na,y=(1:8))
set.na<-function(x,y){replace(x[,y],is.na(x[,y]),0)}
na.list<-lapply(na.list,set.na,y=(2:8))
凡想法是,第一功能將設置基於「OBS」列第一的0值,然後計算各列的其餘部分。 的「set.obs.na」功能不起作用,並返回錯誤:
Error in
[<-.data.frame
(*tmp*
, list, value = 0) : attempt to select more than one element
我不太確定如何最好地實現我想要的結果,所以任何建議將不勝感激。
如下的建議,我會提供一個工作的例子來說明我的問題:
我有數據幀的列表:
df.list<- list(df1 = data.frame(x=c(1,NA, 1,NA), y = c(NA,1,1,1), z=c(1,1,1,NA)),
df2 = data.frame(x = c(NA, NA, 1,1), y=c(1,1,1,1), z=c(NA,1,NA,1)))
我想要替換的NA與零值。不過,我首先想要使用x列NAs來確定y和z列中的值。因此,如果x列中的值爲NA,則無論y,z列中的值是多少,都將被零覆蓋。所以在上面的例子中,df1中的y和z列將有2和3的值寫入零。 我試着用下面這樣:
set.obs.na<- function(a,b){{replace(a[,b],is.na(a[,1]),0)}}
df.list<-lapply(df.list,set.obs.na,b=(1:3))
但我得到以下錯誤:如果相應的
Error in
[<-.data.frame
(*tmp*
, list, value = 0) : attempt to select more than one element
有沒有一種簡單的方法以0比替換y和z列的值x值是NA?
你可以改善你的問題。請閱讀[如何在R中提供最小重現性示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example#answer-5963610)。然後可能相應地編輯和改進它。好的帖子通常提供最少的輸入數據,所需的輸出數據和代碼嘗試 - 在新的/乾淨的R會話中進行全部複製 - 粘貼 - 運行。要替換數據幀列表中的NA,您可以使用lst < - list(df1 = data.frame(x = c(1,NA,3),y = NA),df2 = data.frame a = c(NA,NA,10))); lapply(lst,function(df){df [is.na(df)] < - 0; df})'。 – lukeA
謝謝。我會記住按照您在下次建議的方式創建一個示例。 –
用零替換每列中的NA值對我來說不是問題,而是使用第一列來確定導致問題的後續列。我已經按照建議更新了我的示例。 –