>

이 df가 있습니다 :

data <- structure(list(location = c("bern", "bern", "zurich", "zurich", 
                                "basel", "basel", "basel"), location_latitude = c(4.1, 4.1, 6.2, 
                                                                                  6.2, 7.3, 7.3, 7.3), location_longitude = c(2.1, 2.1, 3.2, 3.2, 
                                                                                                                              5.6, 5.6, 5.6), location_population = c(38, 38, 72, 72, 46, 46, 
                                                                                                                                                                      46), origin = c("zurich", "basel", "bern", "basel", "bern", "zurich", 
                                                                                                                                                                                      "locarno"), origin_temperature = c(12, 20, 21, 20, 21, 12, 27
                                                                                                                                                                                      )), row.names = c(NA, 7L), class = "data.frame")

위치에 대한 위도와 경도는 있지만출발지에 대한 위도와 경도는 없습니다.

다음과 같이 열 위치의 해당 좌표를 기준으로 두 개의 열을 삽입하고원본에 대한 위도와 경도로 채 웁니다.

data_needed <- structure(list(location = c("bern", "bern", "zurich", "zurich", 
                                       "basel", "basel", "basel"), location_latitude = c(4.1, 4.1, 6.2, 
                                                                                         6.2, 7.3, 7.3, 7.3), location_longitude = c(2.1, 2.1, 3.2, 3.2, 
                                                                                                                                     5.6, 5.6, 5.6), location_population = c(38, 38, 72, 72, 46, 46, 
                                                                                                                                                                             46), origin = c("zurich", "basel", "bern", "basel", "bern", "zurich", 
                                                                                                                                                                                             "locarno"), origin_latitude = c("6.2", "7.3", "4.1", 
                                                                                                                                                                                                                             "7.3", "4.1", "6.2", "NA"), origin_longitude = c("3.2", 
                                                                                                                                                                                                                                                                                             "5.6", "2.1", "5.6", "2.1", "3.2", "NA"), origin_temperature = c(12, 
                                                                                                                                                                                                                                                                                                                                                              20, 21, 20, 21, 12, 27)), row.names = c(NA, 7L), class = "data.frame")

열을 현명하게해야한다고 생각하지만 어떻게해야할지 모르겠습니다.

또한 데이터 세트에 수천 개의 위치와 출발점이 있기 때문에 위치를 지정하는 조건 (예 : 'zurich'인 경우)을 추가하고 싶지 않습니다. ‘자동으로’수행해야합니다.

또한 로카르노와 같이 위치에서 일치하는 좌표가없는 원점은 NA를 반환해야합니다.

도와주세요!

  • 답변 # 1

    dplyr 를 사용하는 방법은 다음과 같습니다  

    library(dplyr)
    data %>%
        select(origin = "location", origin_latitude = "location_latitude", origin_longitude = "location_longitude") %>%
        distinct() %>%
        left_join(data, ., by = "origin") %>%
        select(-origin_temperature, origin_temperature)
      location location_latitude location_longitude location_population  origin origin_latitude origin_longitude origin_temperature
    1     bern               4.1                2.1                  38  zurich             6.2              3.2                 12
    2     bern               4.1                2.1                  38   basel             7.3              5.6                 20
    3   zurich               6.2                3.2                  72    bern             4.1              2.1                 21
    4   zurich               6.2                3.2                  72   basel             7.3              5.6                 20
    5    basel               7.3                5.6                  46    bern             4.1              2.1                 21
    6    basel               7.3                5.6                  46  zurich             6.2              3.2                 12
    7    basel               7.3                5.6                  46 locarno              NA               NA                 27
    
    

  • 답변 # 2

    기본 R 사용 :

    data <- within(data, origin_latitude <- location_latitude[match(origin, location)])
    data <- within(data, origin_longitude<- location_longitude[match(origin, location)])
    
    
    data.table 사용 :

    setDT(data)
    data[, 
         c("origin_latitude", "origin_longitude") := .SD[match(origin, location)], 
         .SDcols = c("location_latitude", "location_longitude")]
    
    

관련 자료

  • 이전 image - listviewbuilder가 스크롤되지 않도록 중지
  • 다음 java - 부울 메서드에서 문자열을 반환