我试图通过组合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。谢谢!
答案 0 :(得分:3)
按行应用any
:
df$net_ever <- apply(df[38:54], 1, any)