比较R中的两个整数列值并填充新列

时间:2017-02-27 23:44:58

标签: r if-statement for-loop

我正在尝试根据比较两列值的条件在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,标志始终为1.

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

任何建议都将不胜感激!

5 个答案:

答案 0 :(得分:2)

也许:

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

答案 1 :(得分:0)

怎么样

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

答案 2 :(得分:0)

有些事情:

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

答案 3 :(得分:0)

使用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) })

答案 4 :(得分:0)

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

相反,我希望您考虑此查询。它不仅涵盖了上述条件,而且还检查了列值(此处为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

希望有帮助!