【问题标题】:compare two integer column values in R and fill a new column比较 R 中的两个整数列值并填充一个新列
【发布时间】:2017-02-27 23:44:58
【问题描述】:

我正在尝试根据比较两列值的条件在 R 数据框中填充新列值。使用 for 循环和 if-else 控制语句。

这是我的示例数据集

Year1 | Year2 
----- | -----
1990  | 1990
1992  | 1992
1995  | 1998
1997  | 2000

我想做这样的事情:

for (i in 1:length(year1)
{
if (year1[i] == year2[i]) 
   flag = 1 
   next
else 
   flag = 2
}

这似乎不起作用。由于某种原因,所有条件都被评估为 TRUE,并且 flag 始终为 1。

我想知道为什么所有条件都被评估为 TRUE?我验证了循环遍历 year1 的所有值。

任何建议将不胜感激!

【问题讨论】:

    标签: r if-statement for-loop


    【解决方案1】:

    也许:

    df$flag <- 2
    df[df$Year1==df$Year2,]$flag <- 1
    

    【讨论】:

    • 谢谢!那行得通。我想知道我的 for 循环和 if 语句发生了什么。所有条件均被评估为 TRUE。
    • @keval - 你从不使用i,因此if() 语句将传递year1year2 的所有值。而在if() 语句中,当条件大于长度1 时,只使用第一个元素。该元素在此处计算为 TRUE,因此全部为 TRUE。
    • @RichScriven 我的错,我编辑了原始的 for 循环以包含 [i]。我看到循环遍历 1:length(year1) 并且当我 print(year1[i]==year2[i]) 时,所有结果都是 TRUE。
    【解决方案2】:

    使用apply函数的另一种解决方案

    df = data.frame(Year1 = c(1990, 1992, 1995, 1997), Year2 = c(1990, 1992, 1998, 2000))
    

    应用函数:

    df$flag = apply(df, 1, function(x){ ifelse(x[1] == x[2], 1, 2) })
    

    或使用变量名

    df$flag apply(df, 1, function(x){ ifelse(x["Year1"] == x["Year2"], 1, 2) })
    

    【讨论】:

      【解决方案3】:

      怎么样

      df$flag <- with(df, abs((Year1 == Year2) - 2L))
      df
      #   Year1 Year2 flag
      # 1  1990  1990    1
      # 2  1992  1992    1
      # 3  1995  1998    2
      # 4  1997  2000    2
      

      【讨论】:

        【解决方案4】:

        类似的东西:

        df$flag=ifelse(df$year1==df$year2,1,2)
        

        【讨论】:

          【解决方案5】:

          以上所有解决方案比较同一行的数据并输出标志。

          相反,我希望您考虑这个查询。其中,不仅涵盖上述条件,还检查列值(此处为 year1)与另一列(year2)中存在的其余记录。

          df = data.frame(Year1 = c(1990, 1998, 1992, 1997), Year2 = c(1990, 1992, 1998, 2000))
          
          df$flag <- ifelse(df$Year1 %in% df$Year2, 1, 2)
          df
          
          # Result:
          #   Year1 Year2 flag
          #1  1990  1990    1
          #2  1998  1992    1
          #3  1992  1998    1
          #4  1997  2000    2
          

          希望对您有所帮助!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-04-01
            • 2022-08-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多