首页 > 解决方案 > 对两个匹配的字符串/单词使用 ifelse 函数

问题描述

我的问题很简单。我有一个像这样的数据集:

     observed predicted probability result2
1     Head-up   Grazing   0.2727273   FALSE
2     Head-up   Grazing   0.7272727    TRUE
3     Head-up   Grazing   0.7272727    TRUE
4     Head-up   Grazing   0.5454545    TRUE
5     Head-up   Grazing   0.7272727    TRUE
6     Head-up   Grazing   0.4545455   FALSE
7     Head-up Vigilance   0.3636364   FALSE
8     Head-up   Grazing   0.3636364   FALSE
9     Head-up Vigilance   0.3636364   FALSE
10    Unknown   Grazing   0.3636364   FALSE
11     Moving   Head-up   0.4545455   FALSE
12     Moving   Head-up   0.3636364   FALSE

results2通过使用如下ifelse函数成功创建列的位置:

table$result1<-ifelse(table$probability>0.5,"TRUE","FALSE")

但是,我正在尝试使用相同的函数来创建 column result1,这将是:

table$result1<-ifelse(table$observed=table$predicted, "POSITIVE", "NEGATIVE")`. 

我收到了Error: unexpected '='错误table$result1<-ifelse(table$observed=

observed确实,如果列上的单词与同一行列上的单词匹配,我希望使用“POSITIVE” predicted,反之则使用“NEGATIVE”。

有任何想法吗?任何帮助表示赞赏!

标签: rif-statement

解决方案


就像@Sotos 评论的那样(对不起,我劫持了您的评论,但尚未发布正确答案),问题是您使用=的是==.

看看这个例子:

首先我生成测试数据集

df <- data.frame("observed" = rep(c("observed", "predicted"), 3), 
                 "predicted" = "observed", 
                 stringsAsFactors = F)

看起来像:

   observed predicted
1  observed  observed
2 predicted  observed
3  observed  observed
4 predicted  observed
5  observed  observed
6 predicted  observed

然后使用ifelse

df$result <- ifelse(df$observed == df$predicted, "POSITIVE", "NEGATIVE")

结果是

   observed predicted   result
1  observed  observed POSITIVE
2 predicted  observed NEGATIVE
3  observed  observed POSITIVE
4 predicted  observed NEGATIVE
5  observed  observed POSITIVE
6 predicted  observed NEGATIVE

同样,正如@Soto 指出的那样,您的问题是存储在数据集中的数据类型。你有factors而且应该是characters

我在创建数据集时添加了这个问题stringsAsFactors = F,这也适用于read.tableor之类的函数read.csv

另一种选择是使用@Soto 建议的解决方案,类似于

df$observed <- as.character(df$observed)
df$predicted <- as.character(df$predicted)

在使用该ifelse功能之前。


推荐阅读