2017-08-04 73 views
0

我想创建一个虚拟变量,并且需要组合其他变量的若干条件以将值赋值给它。其中一个变量是新创建的,我在这里遇到问题。在R数据框中,为什么我不能在条件中使用新创建的变量来创建另一个变量

attach(originaldata) 
originaldata$hk_nonagr[hktype == 2 |hktype ==4 |hktype == 5] <- 1 
originaldata$hk_nonagr[hktype == 1 |hktype == 3 |hktype == 6 |hktype == 7] <- 0 
originaldata$hk_nonagr <- factor(originaldata$hk_nonagr, 
          levels = c(1, 0), 
          labels = c("yes", "no")) 

这是我新创建的变量。然后我想用它来创建另一个变量。

originaldata$hk_effort[urbanhk == 1|urbanhk == 2|urbanhk == 3|urbanhk == 4|urbanhk == 7] <- 1 
originaldata$hk_effort[originaldata$hk_nonagr == 0 |yr_urbanhk == 9997|r_urbanhk == 5|r_urbanhk == 6|r_urbanhk ==8|r_urbanhk ==9] <- 0 

这里我得到了问题。值0不能分配。我试过

originaldata$hk_effort[originaldata$hk_nonagr == 0] <- 0 

它不起作用,这就是为什么我认为问题是关于新创建的变量。每当我在条件中使用新创建的变量时,我都会遇到同样的问题。

我是R的初学者,所以请告诉我,这种方式对代码是不好的。在Stata中,我很习惯写

replace x = 4 if (a == 1 | b ==3) & c != 8 

但是我现在觉得R用户没有这样的代码。提前感谢您的任何建议。

+0

你的问题几乎可以肯定你正在使用'attach'。不要这样做。它与许多问题有关。而是使用'with'或者直接输入全名。你会避免这种头痛。 – lmo

+0

如果你提供一个[可重现的例子](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)和样本输入数据,它会更容易帮助你,所需的输出数据。在R代码中使用'attach()'通常也不是一个好主意。对于这样的突变,您可能还会考虑使用'dplyr'库来使事情更清洁。 – MrFlick

+0

@Imo @ MrFlick谢谢。我会避免'attch()'并尝试''和'dplyr'。 – DXC

回答

0

使用dplyr您可以将mutateifelse组合起来以实现您正在尝试的操作。

Here你可以检查如何使用dply进行条件变异。

代码:

library(dplyr) 
originaldata <- originaldata %>% mutate(hk_nonagr = ifelse(hktype == 2 | 
       hktype ==4 | hktype == 5, 1, 
       ifelse(hktype == 1 |hktype == 3 |hktype == 6 |hktype == 7, 
       0))) 

originaldata <- originaldata %>% mutate(hk_effort = ifelse(urbanhk == 
       1 | urbanhk == 2 | urbanhk == 3 | urbanhk == 4 | urbanhk == 
       7, 1, 
       ifelse(hk_nonagr == 0 | yr_urbanhk == 9997| r_urbanhk == 
       5 | r_urbanhk == 6 | r_urbanhk ==8 | r_urbanhk ==9, 0))) 

这是做的一种方式,你可以找到其他的选择。

相关问题