【问题标题】:Creating a new variable using many column使用多列创建新变量
【发布时间】: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


    【解决方案1】:

    按行申请any

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

    【讨论】:

    • 您可以添加参数 na.rm=T 只是为了确保生成的向量没有 NA。
    • 所以...简单...非常感谢!这正是我所需要的!
    猜你喜欢
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 2022-01-02
    相关资源
    最近更新 更多