我有以下数据:
library(dplyr)
d <- data_frame(
unique = c(1,2,3,4),
lat = c(NA, 87.6, 78.6, 67.7),
latitude= c(34.5, NA, 45.6, 34.8))
我想做的是,当纬度中有一个“ NA”(例如,在第1列中“纬度”中有一个NA)时,将采用纬度值。因此,我最终得到一个名为“ latitude_new”的新列,看起来像(34.5, 87.6, 45.6, 34.8)
。
我确定可以使用'dplyr中的mutate完成此操作,我不确定如何?
答案 0 :(得分:5)
使用dplyr::coalesce
将所有NA替换为第一个非缺失值
library(dplyr)
d %>% mutate(latitude_new = coalesce(lat,latitude))
# A tibble: 4 x 4
unique lat latitude latitude_new
<dbl> <dbl> <dbl> <dbl>
1 1 NA 34.5 34.5
2 2 87.6 NA 87.6
3 3 78.6 45.6 78.6
4 4 67.7 34.8 67.7
答案 1 :(得分:3)
您还可以考虑使用ifelse
。
library(dplyr)
d2 <- d %>%
mutate(latitude_new = ifelse(is.na(lat), latitude, lat))
d2
# # A tibble: 4 x 4
# unique lat latitude latitude_new
# <dbl> <dbl> <dbl> <dbl>
# 1 1 NA 34.5 34.5
# 2 2 87.6 NA 87.6
# 3 3 78.6 45.6 78.6
# 4 4 67.7 34.8 67.7
R的基本底线是
d$latitude_new <- with(d, ifelse(is.na(lat), latitude, lat))
或
d2 <- transform(d, latitude_new = ifelse(is.na(lat), latitude, lat))
答案 2 :(得分:2)
我们可以使用pmin
library(dplyr)
d %>%
mutate(latitude_new = pmin(lat, latitude, na.rm = TRUE))
# A tibble: 4 x 4
# unique lat latitude latitude_new
# <dbl> <dbl> <dbl> <dbl>
#1 1 NA 34.5 34.5
#2 2 87.6 NA 87.6
#3 3 78.6 45.6 45.6
#4 4 67.7 34.8 34.8