【发布时间】:2019-05-13 16:39:30
【问题描述】:
我有一个数据框,其中两个变量(纬度和经度)的值不正确。数据框中的错误值列为 999.00,正确的值应分别为 42.68 和 -72.47。
我想要一种简单的方法来使用 dplyr 替换这些值,但我的尝试(见下文)没有成功(下面提供了错误)。
df$Lat2 <- recode(df$Lat, "999.00"="42.68", .default=x)
lapply(x, f) 中的错误:找不到对象“x”
df <- df %>%
mutate(Lat2 = if_else(Lat == 999.00, 42.68, NULL, NULL))
mutate_impl(.data, dots) 中的错误: 评估错误:未使用的参数 (recvLat = 999)。
df <- df %>%
mutate(Lat2 = ifelse(Lat == 999.00, 42.68, NULL))
mutate_impl(.data, dots) 中的错误: 评估错误:替换的长度为零。 另外:警告信息: 在 rep(no, length.out = length(ans)) : 'x' 为 NULL,因此结果将为 NULL
df <- df %>%
mutate(Lat2 = case_when(Lat == 999.00 ~ 42.68, TRUE ~ NULL))
mutate_impl(.data, dots) 中的错误: 评估错误:下标超出范围。
对于后三个尝试,如果数字在引号中(即“999.00”和“42.68”),我会得到相同的错误
【问题讨论】:
-
您的
ifelse语句应该以实际列作为替代,而不是NULL,即ifelse(..,..., df$Lat) -
这不能用
df$Lat <- df$Lat %>% gsub("999.00", "42.68")解决吗? -
@huan... 不。
df$Lat是数值变量,不是字符串 -
类似:as_tibble(df) %>% mutate(Lon = case_when(revcLat == 999 ~ 42.68), Lat2 = case_when(Lat == 999 ~ -72.47))