【发布时间】:2021-08-29 13:38:25
【问题描述】:
我有一个包含 20,000 行的数据框(df),如下所示:
type letter
1 a a
2 a k
3 a j
4 a c
5 a p
... ... ...
2523 i v
2524 i j
2525 i k
2526 i b
... ... ...
7900 a p
7901 a x
7902 a c
... ... ...
我想根据两个条件创建一个新列“匹配”: (1) 如果 type==a 且 letter==a、b 或 c,则 MATCH (2) MATCH if type==i and letter==i, j, or k
所以我运行了 if 语句:
a.letter=c("a", "b", "c")
i.letter=c("i", "j", "k")
if (df$type=="a") {
df$match <- ifelse(df$letter %in% a.letter, "MATCH", "NO MATCH")
} else if (df$type=="i") {
df$match <- ifelse(df$letter %in% i.letter, "MATCH", "NO MATCH")
}
我想要的输出是这样的:
type letter match
1 a a MATCH
2 a k NO MATCH
3 a j NO MATCH
4 a c MATCH
5 a p NO MATCH
... ... ... ...
2523 i v NO MATCH
2524 i j MATCH
2525 i k MATCH
2526 i b NO MATCH
... ... ... ...
7900 a p NO MATCH
7901 a x NO MATCH
7902 a c MATCH
... ... ...
但是,似乎第二个 if 语句被完全忽略了。 我当前的输出如下所示:
type letter match
1 a a MATCH
2 a k NO MATCH
3 a j NO MATCH
4 a c MATCH
5 a p NO MATCH
... ... ... ...
2523 i v NO MATCH
2524 i j NO MATCH
2525 i k NO MATCH
2526 i b NO MATCH
... ... ... ...
7900 a p NO MATCH
7901 a x NO MATCH
7902 a c MATCH
... ... ...
为了解决问题,我尝试只使用一个 if 语句进行测试,但奇怪的是,它对第一个条件语句非常有效,但对于第二个条件语句却不行。
这行得通:
if (df$type=="a") {
df$match <- 0
}
但这没有(没有创建新列):
if (df$type=="i") {
df$match <- 0
}
为什么 R 不能完全识别我的第二个条件句?
【问题讨论】:
-
您可以使用
dput(df)提供包含“i”的行的样本吗?可能存在空格字符,例如前导或尾随空格,这会导致您的第二个语句无法匹配(例如,如果数据实际上是“i”而不是“i”。
标签: r if-statement conditional-statements