【问题标题】:R - Create and populate new column in dataframe using for loopR - 使用 for 循环在数据框中创建和填充新列
【发布时间】:2015-07-24 15:19:43
【问题描述】:

我的最终目标是绘制颜色对应于高度的数据点(原始数据是 .csv 文件中的一列)。我已经使用高度列创建了一个数据框,现在我正在尝试创建一个新列,随着高度的增加分配颜色。范围是 0-400,所以我想每 50 英尺更改一次颜色。

e_miss_df$color <- ""
for (i in nrow(e_miss_df$e_miss.altitude.feet.)) {
  if (i <= 50.0){
    n <- "#00A600FF"
    e_miss_df$color[i] <- n
}  else if (i <= 100.0) {
    n <- "#3EBB00FF"
    e_miss_df$color[i] <- n
}  else if (i <= 150.0) {
    n <- "#8BD000FF"
    e_miss_df$color[i] <- n
}  else if (i <= 200.0){
    n <- "#E6E600FF"
    e_miss_df$color[i] <- n
}  else if (i <= 250.0) {
    n <- "#E8C32EFF"
    e_miss_df$color[i] <- n
}  else if (i <= 300.0) {
    n <- "#EBB25EFF"
    e_miss_df$color[i] <- n
}  else if (i <= 350.0) {
    n <- "#EDB48EFF"
    e_miss_df$color[i] <- n
}  else if (i <= 400.0) {
    n <- "#F0C9C0FF"
    e_miss_df$color[i] <- n
}  else {
    n <- "black"
    e_miss_df$color[i] <- n
  }
}

我没有收到任何错误,但该列没有被填满(第 6 行除外??)。我知道现在它的效率非常低,但我还是很新……任何想法/建议将不胜感激!如果你有更好的方法来获得情节,那就太好了哈哈

【问题讨论】:

  • 试试for (i in 1:nrow(e_miss_df$e_miss.altitude.feet.)){...。你循环的分隔符不正确,因为循环的开头,大概是1:,丢失了;不管是否有更好的方法来对此进行编程。在您的循环中,您并没有真正循环,而是只检查最后一个条目,即i=nrow(...) 的情况。

标签: r for-loop dataframe


【解决方案1】:

在 R 中,您通常希望处理整个数据帧并避免循环。你可以试试这样的:

#function that will assign color based on values
definecolor <- function(x) {
  color = "black"
  if (x <= 50)  color <- "#00A600FF"
  if (x <= 100) color <- "#3EBB00FF"
  if (x <= 150) color <- "#8BD000FF"
  if (x <= 200) color <- "#E6E600FF"
  if (x <= 300) color <- "#EBB25EFF"
  if (x <= 350) color <- "#EDB48EFF"
  if (x <= 400) color <- "#F0C9C0FF"
  return(color)
}

#apply that function to all values in a column and put those values in the new column
e_miss_df$color <- lapply(definecolor, e_miss_df$e_miss.altitude.feet.)

# you can also use ggplot to get intervals directly. something like this:
df <- data.frame(x = c(50,100,150,200,300,350,400), y=x)
ggplot(df, aes(x=x,y=x, color=cut_interval(y,6))) + geom_point()

【讨论】:

    猜你喜欢
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多