【发布时间】:2014-09-15 17:53:16
【问题描述】:
我正在尝试通过组合 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 列。如果他们昨晚使用了网,则 value=1,如果他们没有,则 value=0。有一些缺失的数据点,编码为“NA”。如果任何时间点=1,我想使newvar=1,如果它们从不=1,我想使newvar=1。
我尝试了一个大而长的 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。谢谢!
【问题讨论】:
标签: r loops variables if-statement