R 对两个匹配的字符串/单词使用ifelse函数

R 对两个匹配的字符串/单词使用ifelse函数,r,if-statement,R,If Statement,我的问题很简单。我有这样一个数据集: 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-

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

     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
在这里,我已通过使用类似以下的
ifelse
函数成功创建了列
results2

table$result1<-ifelse(table$probability>0.5,"TRUE","FALSE")
我在
表$result1中得到了错误
错误:意外的“=”
,如@Sotos评论(很抱歉,我劫持了你的评论,但正确答案尚未发布),问题是你使用的是
=
而不是
=

看看这个例子:

首先,我生成测试数据集

df <- data.frame("observed" = rep(c("observed", "predicted"), 3), 
                 "predicted" = "observed", 
                 stringsAsFactors = F)
然后使用
ifelse

df$result <- ifelse(df$observed == df$predicted, "POSITIVE", "NEGATIVE")
同样,正如@Soto指出的,您的问题是数据集中存储的数据类型。您有
因子
,它应该是
字符

我已经解决了这个问题,在创建数据集时添加了
stringsAsFactors=F
,这样也可以使用
read.table
read.csv
等函数

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

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

df$您需要
==
进行比较<代码>=
正在分配(与
0.5
相同,将生成布尔值,
是一个常用的基函数,最好避免将其作为变量名Yes,即使使用
=
时,我也会得到
>表$result1Yes,但您会得到不同的错误。这一次,您的两个变量是具有不同级别的因子,因此无法进行比较。转换为
as.ch当使用
as.character
时,您能帮助我吗?我已经尝试了
as.character(表)
as.character(表$observed)as.character(表$predicted)
,但仍然得到
>表$result1
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
df$observed <- as.character(df$observed)
df$predicted <- as.character(df$predicted)