使用许多列创建新变量

时间:2014-09-15 17:53:17

标签: r loops variables if-statement

我试图通过组合25个其他变量(夜间不同的时间点)来创建一个新变量。以下是五个时间点,例如:

   net_8pm net_830pm net_9pm net_930pm net_10pm net_1030pm
1       0         0       0         1        1          1
2       0         0       0         0        0          0
3       0         0       0         0        0          0
4       0         0       1         1        1          1
5       1         0       0         0        0          0
6       0         1       1         1        1          1

在我的数据中,它们是第34:58列。如果他们昨晚使用网络,值= 1,如果他们没有,则值= 0。有一些缺失的数据点,编码为“NA”。如果任何时间点= 1,我想使newvar = 1,如果它们从不= 1,我想要0。

我尝试了一个很长的ifelse字符串,这个字符很难看,并且似乎没有拾取所有行(我有182个人,当我运行ifelse字符串时我只得到160)。我制作自己的功能和循环很糟糕,所以我尝试的一切都是破产。我要么变得可怕 - 我尝试的事情大约有90%:

for (i in colnames(df)[38:54]){
+ df$net_ever<- ifelse(i==1, 1, 
+ ifelse(i==0, 0,
+ NA))
+ }
> table(df$net_ever)
< table of extent 0 >

或者它变成了4450行:

collapse_ifelse<-function(x){
+ ifelse(x==1, "yes", 
+ ifelse(x==0, "no",
+ NA))
+ }
> df$net_ever<-apply(df, 2, FUN=collapse_ifelse) 

或者我收到此警告:

> f1<-function(x){
+ for (i in 1:x)
+ ifelse(x==1, "yes", 
+ ifelse(x==0, "no",
+ NA))
+ }
> df$net_ever<-apply(df, 2, FUN=f1)
There were 26 warnings (use warnings() to see them)
> warnings()
Warning messages:
1: In 1:x : numerical expression has 182 elements: only the first used

或者我得到182 0:

> df$net_ever2<-rep(0,182)
> for (i in 1:182){
+ ifelse(i==1, "yes", 
+ ifelse(i==0, "no",
+ NA))
+ }
> table(df$net_ever)

  0 
182

你可以看到我不知道我在这里做什么(令人尴尬的是不得不张贴这些帮助,但绝望的时候要求绝望的措施)。我非常感谢有关如何折叠这些变量的帮助!我在Windows 7中使用R 3.0.3。谢谢!

1 个答案:

答案 0 :(得分:3)

按行应用any

df$net_ever <- apply(df[38:54], 1, any)