【发布时间】:2020-09-21 03:40:56
【问题描述】:
我正在尝试清理我的代码以清理丢失的数据。我有一个包含 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 "}"
我也在阅读其他方式,例如应用等,但我想不出一种方法来循环每列
【问题讨论】:
-
for (i in 1:ncol(.))。将是第一步,就像您只迭代最后一列一样。 -
您可能对
mutate_all感兴趣(或者,如果您已经升级到刚刚发布的 dplyr 1.0,across()) -
另一个问题是您正在混合索引方法 - 如果输入是小标题,带有逗号的单括号
df[, i]会给您一个 1 列小标题,或者如果输入是单列向量是一个数据框。明智的做法是使用[[来保证无论输入如何都能获得单列向量,但不要在[[中使用,,只需使用[[i]]。 -
我还有一个稍微相关的问题。如果我必须使用特定于每一列的值,那么 mutate_all 将不起作用。在这种情况下,我该怎么办?
-
@GregorThomas 我也尝试过 [[i]] 但发生了同样的错误。 mutate_all 虽然对我有用
标签: r for-loop apply data-cleaning dplyr