基于现有变量创建新变量

时间:2017-12-22 19:57:14

标签: r for-loop if-statement var

我当前的数据集看起来像这样

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个项目,如果varialbe“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

由于我的实际数据集非常大,我正在尝试使用for语句来生成“V2”。但我的代码一直在失败。我很感激,如果有人可以帮助我,我会对其他声明持开放态度。谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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