当存在NA时将数据从一列移动到另一列

时间:2018-08-09 12:17:43

标签: r dplyr

我有以下数据:

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完成此操作,我不确定如何?

3 个答案:

答案 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