1

我在 R 中编写一个代码。首先我在数据集中创建一个空白列,我想根据某些条件在该列中分配 0 和 1 值。这是我的代码

#Creating a empty column in the data file 
Mydata$final <- "";

#To assign 0,1 value in final variable
if(Mydata$Default_Config == "No" & is.na(Mydata$Best_Config)=="TRUE" & (Mydata$AlmostDefaultConfig!=1 | Mydata$AlmostDefaultConfig!=3)){
  Mydata$final <- 1
  }else{
  Mydata$final <- 0  
  }

我收到了这个错误

Warning message:
In if (Mydata$Default_Config == "No" & is.na(Mydata$Best_Config) ==  :
  the condition has length > 1 and only the first element will be used

我该如何解决这个错误?请帮帮我。提前致谢

4

2 回答 2

0

另一种方法是利用R' 强制。你有一组可向量化的条件,R 很乐意将 TRUE/FALSE 转换为 1 / 0,所以你可以这样写:

Mydata$final <- (  (Mydata$Default_Config == "No") *( is.na(Mydata$Best_Config)=="TRUE") *  (Mydata$AlmostDefaultConfig!=1 +  Mydata$AlmostDefaultConfig!=3))  )

(为清楚起见添加了额外的括号)。如果我搞砸了那里的逻辑,我深表歉意。

编辑:我的 OR 代码不太适用,因为如果双方都是 TRUE,你会得到一个大数字(“2”:-))。将其更改为as.logical((Mydata$AlmostDefaultConfig!=1 + Mydata$AlmostDefaultConfig!=3))

于 2013-07-19T11:46:34.287 回答
0

您的问题是矢量化之一。if不是矢量化的。您在if语句中的每个比较中测试多个值,并且 R 告诉您它只会使用第一个值,因为if它没有向量化。您需要ifelse矢量化的:

ifelse( Mydata$Default_Config == "No" & is.na(Mydata$Best_Config)=="TRUE" & (Mydata$AlmostDefaultConfig!=1 | Mydata$AlmostDefaultConfig!=3) , 1 , 0 )

下面是一个可重现的示例。如果x>5 并且y是偶数则返回,1否则返回0

x <- 1:10
# [1]  1  2  3  4  5  6  7  8  9 10

y <- seq(1,30,3)
# [1]  1  4  7 10 13 16 19 22 25 28

x > 5
# [1] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE

y %% 2 == 0
# [1] FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE

ifelse( x > 5 & y %% 2 == 0 , 1 , 0 )
# [1] 0 0 0 0 0 1 0 1 0 1
于 2013-07-19T10:43:20.987 回答