我正在尝试根据比较两列值的条件在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的所有值。
任何建议都将不胜感激!
答案 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
希望有帮助!