2016-07-29 46 views
1

我有一個data.frames的列表,我想有條件地重新分配data.frame中的值。如果我只是分配給一個data.frame我會說,像如何子集在數據列表中分配值

DF[DF==9] <- NA 

設置在data.frame是9 NA所有條目。然而,當我嘗試使用lapply做對列表中的每個data.frame相同的過程:

List_of_DFs <- list(DF1, DF2, DF3) 
List_of_DFs <- lapply(List_of_DFs, function(x) x[x==9] <- NA) 

而不是9每個值成爲NA,整個列表條目變成NA。所以在上面的情況下,List_of_DFs變成NA,NA,NA

我知道我可以用for循環和[[]]子集操作符來做到這一點,但我認爲必須有更好的方法。

如果它很有趣或相關,這個問題背後的動機是data.frames列表來自XLConnect,隨後我將按行綁定data.frames,但我首先想要將某些字符值放在列中這應該是所有數字,所以我可以強制數字,然後按行綁定。

回答

0

我們需要回到x得到data.frame

lapply(List_of_DFs, function(x) {x[x==9] <- NA; x}) 

或者另一種選擇是replace

lapply(List_of_DFs, function(x) replace(x, x == 9, NA)) 

如果我們使用dplyrmutate_each我們可以改變的列值那就是9到NA

lapply(List_of_DFs, function(x) x %>% 
            mutate_each(funs(replace(., .==9, NA)))) 
相關問題