簡體   English   中英

遍歷數據框行並在新列(R)中添加值

[英]Loop through dataframe rows and add value in a new column (R)

我有一個數據框(df),其中有一列緯度(Lat),我需要匹配相應的經度值(基於另一個數據集中的關系)。 新列名稱為“ Long_matched”。

在這里,我試圖在相應行的'Long_matched'列中寫入一個新值,以將緯度設置在-33.9238和-33.9236之間。 “拉特”中的數據還有更多小數位(例如:-33.9238026666667,-33.9236026666667等)。 由於我會將這段代碼應用於同一地理位置上的多個數據集(因此,長的小數位會略有不同),因此我想編寫落在0.0002度范圍內的經度值。

我嘗試過的一些代碼嘗試包括:

df$Long_matched <- ifelse(df$Lat< -33.9236 & df$Lat> -33.9238, 151.2279 , "N/A")

要么

df$Long_matched[df$Lat< -33.9236 & df$Lat> -33.9238] <- 151.2279

我想我需要使用for循環遍歷行和if語句,但是要弄清楚這一點-任何幫助將不勝感激!

結果輸出應如下所示:

Lat                   Long_matched
-33.9238026666667     151.2279
-33.9236026666667     (new long value will go here)

注釋中所述的所有內容均適用,但是您可以嘗試以下技巧:在下面的代碼中,您將需要用數字替換文本。

Latitude_breaks <- seq(min_latitude, max_latitude, 0.0002) # you need to replace `min_latitude`, `max_latitude`, and `increment` with numbers
Longitude_values <- seq(first, last, increment) # you need to replace `first`, `last` and `increment` with numbers
df <- within(df, {
  # make a categorical version of `Lat`
  Lat_cat <- cut(Lat, Latitude_breaks)
  Long_matched <- Longitude_values[Lat_cat]
})

一些注意事項:

  1. min_latitudemin_latitude + 1之間的值將分配給首先標記的Longitude值。
  2. Latitude_beaks的長度應比Longitude_values的長度Longitude_values
  3. Latitude_breaks以外的Lat值將變為NA。

這通過利用因子的一個很好的功能而起作用-它們存儲為整數。 因此,我們可以使用它們來索引另一個矢量-在這種情況下為Longitude_values

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM