繁体   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