【问题标题】:Create a new variable based on existing variable基于现有变量创建新变量
【发布时间】:2018-06-05 10:00:28
【问题描述】:

我当前的数据集是这样的

Order     V1     
1         7     
2         5    
3         8     
4         5  
5         8 
6         3    
7         4  
8         2     
1         8    
2         6 
3         3 
4         4 
5         5 
6         7 
7         3 
8         6 

我想根据变量“Order”和“V1”创建一个名为“V2”的新变量。对于“Order”变量中的每8个项目,如果变量“Order”的观察值等于1,我想在“V2”中分配一个值“0”;否则,“V2”取“V1”中前一项的值。 这是我想要的数据集

Order    V1    V2
1        7     0
2        5     7
3        8     5
4        5     8
5        8     5
6        3     8
7        4     3
8        2     4
1        8     0
2        6     8
3        3     6
4        4     3
5        5     4
6        7     5
7        3     7
8        6     3

由于我的实际数据集非常大,我尝试使用带有 if 语句的 for 循环来生成“V2”。但是我的代码一直失败。如果有人可以在这方面帮助我,我将不胜感激,我对其他陈述持开放态度。谢谢!

【问题讨论】:

    标签: r for-loop if-statement var


    【解决方案1】:

    (前面:我假设Order 的顺序是完全受控的。)

    您只需要ifelselag

    df <- read.table(text="Order     V1     
    1         7     
    2         5    
    3         8     
    4         5  
    5         8 
    6         3    
    7         4  
    8         2     
    1         8    
    2         6 
    3         3 
    4         4 
    5         5 
    6         7 
    7         3 
    8         6 ", header=T)
    
    df$V2 <- ifelse(df$Order==1, 0, lag(df$V1))
    df
    #    Order V1 V2
    # 1      1  7  0
    # 2      2  5  7
    # 3      3  8  5
    # 4      4  5  8
    # 5      5  8  5
    # 6      6  3  8
    # 7      7  4  3
    # 8      8  2  4
    # 9      1  8  0
    # 10     2  6  8
    # 11     3  3  6
    # 12     4  4  3
    # 13     5  5  4
    # 14     6  7  5
    # 15     7  3  7
    # 16     8  6  3
    

    【讨论】:

    • 或者简单:ifelse(df$Order == 1, 0, c(NA, df$V1))
    【解决方案2】:
    with(dat,{V2<-c(0,head(V1,-1));V2[Order==1]<-0;dat$V2<-V2;dat})
       Order V1 V2
    1      1  7  0
    2      2  5  7
    3      3  8  5
    4      4  5  8
    5      5  8  5
    6      6  3  8
    7      7  4  3
    8      8  2  4
    9      1  8  0
    10     2  6  8
    11     3  3  6
    12     4  4  3
    13     5  5  4
    14     6  7  5
    15     7  3  7
    16     8  6  3
    

    【讨论】:

      猜你喜欢
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-10
      相关资源
      最近更新 更多