我有一个如下所示的数据框:
Word Value1 Value2
Apple True True
Chair True False
nonWord False False
Hat False True
... ...
Run Code Online (Sandbox Code Playgroud)
我正在尝试将 nonWords 的所有值更改为NAs。
data %>%
mutate(Value1 = ifelse(Word == "nonWord", NA, Value1)) %>%
mutate(Value2 = ifelse(Word == "nonWord", NA, Value2))
Run Code Online (Sandbox Code Playgroud)
然而,这似乎不起作用,因为我的价值观没有被NA's 取代。有谁知道我做错了什么?
期望的输出:
Word Value1 Value2
Apple True True
Chair True False
nonWord NA NA
Hat False True
... ...
Run Code Online (Sandbox Code Playgroud)
小智 5
对于这些情况,最好使用replace()frombase R而不是:ifelse()
library(dplyr)
df %>%
mutate(Value1 = replace(Value1, Word == "nonWord", NA),
Value2 = replace(Value2, Word == "nonWord", NA))
#> Word Value1 Value2
#> 1 Apple True True
#> 2 Chair True False
#> 3 nonWord <NA> <NA>
#> 4 Hat False True
Run Code Online (Sandbox Code Playgroud)
如果您确定要替换的所有列都名为“Value...”,则可以利用mutate_at()from dplyr:
library(dplyr)
df %>%
mutate_at(vars(starts_with("Value")), ~ replace(., Word == "nonWord", NA))
#> Word Value1 Value2
#> 1 Apple True True
#> 2 Chair True False
#> 3 nonWord <NA> <NA>
#> 4 Hat False True
Run Code Online (Sandbox Code Playgroud)
df <- structure(list(Word = c("Apple", "Chair", "nonWord", "Hat"),
Value1 = c("True", "True", "False", "False"), Value2 = c("True",
"False", "False", "True")), class = "data.frame",
row.names = c(NA, -4L))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2356 次 |
| 最近记录: |