[英]How do I loop through columns in R?
我正在嘗試清理我的代碼以清理丟失的數據。 我有一個包含 6 列的數據集,如果我像這樣單獨執行它們,則代碼可以工作:
mammographic_masses <- mammographic_masses %>%
mutate(birad = replace(birad, birad== "na", NA)) %>%
mutate(birad = replace(birad, birad== "N/A", NA))
但是當我嘗試在這樣的 for 循環中執行此操作時:
for (i in ncol(mammographic_masses)){
print(class(mammographic_masses[[i]]))
mammographic_masses <- mammographic_masses %>%
mutate(mammographic_masses[[,i]] = replace(mammographic_masses[[,i]], mammographic_masses[[,i]] == "na", NA)) %>%
mutate(mammographic_masses[[,i]] = replace(mammographic_masses[[,i]], mammographic_masses[[,i]] == "N/A", NA))
}
我收到一個錯誤:
Error: unexpected '=' in:
" mammographic_masses <- mammographic_masses %>%
mutate(mammographic_masses[[,i]] ="
> mutate(mammographic_masses[[,i]] = replace(mammographic_masses[[,i]], mammographic_masses[[,i]] == "N/A", NA))
Error: unexpected '=' in " mutate(mammographic_masses[[,i]] ="
> }
Error: unexpected '}' in "}"
我也在閱讀其他方式,例如應用等,但我想不出一種方法來循環每列
使用mutate_all
代替循環。
library(dplyr)
mammographic_masses %>%
mutate_all(function(x) {is.na(x) <- x %in% c("na", "N/A"); x})
# V1 V2 V3 V4
#1 d b <NA> c
#2 d b <NA> <NA>
#3 <NA> <NA> d b
#4 a <NA> <NA> b
#5 a b d <NA>
#6 d c b c
#7 b b d <NA>
#8 <NA> <NA> <NA> d
#9 a d d <NA>
#10 <NA> b d <NA>
測試數據創建代碼
set.seed(2020)
n <- 10
mammographic_masses <- replicate(4, sample(c(letters[1:4], "na", "N/A"), n, TRUE))
mammographic_masses <- as.data.frame(mammographic_masses)
提供首選across
“新” dplyr
以及str_replace_all
(好點@Gregor)
library(dplyr)
library(stringr)
mammographic_masses %>%
mutate(across(everything(),
~ str_replace_all(., c("na" = NA_character_, "N/A" = NA_character_))))
#> V1 V2 V3 V4
#> 1 d b <NA> c
#> 2 d b <NA> <NA>
#> 3 <NA> <NA> d b
#> 4 a <NA> <NA> b
#> 5 a b d <NA>
#> 6 d c b c
#> 7 b b d <NA>
#> 8 <NA> <NA> <NA> d
#> 9 a d d <NA>
#> 10 <NA> b d <NA>
與銳相同的數據
set.seed(2020)
n <- 10
mammographic_masses <- replicate(4, sample(c(letters[1:4], "na", "N/A"), n, TRUE))
mammographic_masses <- as.data.frame(mammographic_masses)
我們也可以使用na_if
library(dplyr)
mammographic_masses %>%
mutate(across(everything(), ~ na_if(na_if(., "na"), "N/A")))
set.seed(2020)
n <- 10
mammographic_masses <- replicate(4, sample(c(letters[1:4], "na", "N/A"), n, TRUE))
mammographic_masses <- as.data.frame(mammographic_masses)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.