首页 > 解决方案 > 比较数据框R中每行的列

问题描述

我有一个包含 3 列和几千行的数据框。现在我想比较每行列中的值,以查看这些值是否遵循特定趋势。

Df <- data.frame(Value1 = c(13,19,56,47,15,13,64, 48), Value2 = c(54,64,11,21,15,48,12,78), Value3 = c(66,78,05,12,21,23,45,30))

在此示例中,数据帧第 1 行将是一个向上的斜坡,而第 3 行将是一个向下的斜坡。

我写了这个 for 循环来遍历整个数据框。

for(row in 1:nrow(Df)) {
  if (Df$Value1 > Df$Value2 & Df$Value2 > Df$Value3){
    print("Downward slope")
  } else if (Df$Value1 < Df$Value2 & Df$Value2 < Df$Value3){
    print("Upward slope")
  } else if (Df$Value1 > Df$Value2 & Df$Value2 < Df$Value3){
    print("Dip")
  } else if (Df$Value1 < Df$Value2 & Df$Value2 > Df$Value3){
    print("Peak")
  }
}

现在这可能已经非常低效了,但它甚至不起作用。运行这个我得到错误:

条件长度 > 1 且仅使用第一个元素条件长度 > 1 且仅使用第一个元素[1]“上坡”

条件长度 > 1 且仅使用第一个元素 条件长度 > 1 且仅使用第一个元素[1]“向上倾斜”

我怎样才能让这样的事情起作用?

标签: rdataframefor-loopif-statement

解决方案


可能最好使用矢量化ifelse而不是循环

ifelse(Df[,1] >  Df[,2],
  ifelse(Df[,2] >  Df[,3], 'down', 'dip'),
  ifelse(Df[,2] >  Df[,3], 'peak', 'up'))
#[1] "up"   "up"   "down" "down" "up"   "peak" "dip"  "peak"

推荐阅读