比较R中的两个整数列值,然后填充新列



我试图根据比较两个列中值的条件在R数据框中填充新的列值。用于循环和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
}

这似乎不起作用。由于某些原因,所有条件均以真实的方式评估,标志始终为1。

我想知道为什么所有条件都被评估为真实?我验证了循环在所有年度的所有值中都迭代。

任何建议都将不胜感激!

也许:

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

使用应用功能的另一种解决方案

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

怎么样
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

与:

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

首先将数据与同一行进行比较并输出标志。

而是,我希望您考虑此查询。这不仅涵盖了上述条件,而且还检查了列值(此处1年),其余的记录中的其余记录(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

希望它能有所帮助!

最新更新