R 如果值大于其上一个值,则使用ifelse语句计算
我试图计算每个小组前一天的变化 假设我有这些观察结果:R 如果值大于其上一个值,则使用ifelse语句计算,r,R,我试图计算每个小组前一天的变化 假设我有这些观察结果: cat var1 var2 date 1 male 172 68 2011-01-01 2 female 61 141 2011-01-02 3 female 211 208 2011-01-03 4 other 10 95 2011-01-04 5 female 149 49 2011-01-05 如果当前var1大于或不大于使用ifelse语句得到的先前
cat var1 var2 date
1 male 172 68 2011-01-01
2 female 61 141 2011-01-02
3 female 211 208 2011-01-03
4 other 10 95 2011-01-04
5 female 149 49 2011-01-05
如果当前var1大于或不大于使用ifelse语句得到的先前结果,我想添加一个0或1的新列
cat var1 var2 date NEWCOL
1 male 172 68 2011-01-01 -
2 female 61 141 2011-01-02 -
3 female 211 208 2011-01-03 1 # since its greater than 61
4 female 10 95 2011-01-04 0 # since its less than 211
5 female 149 49 2011-01-05 1 # since its greater than 10
数据:
试试这个:
var1向量:
df$var1
[1] 212 103 43 193 29 153 164 115 136 91 9 130 72 116 102 113 28 167 210 132 14 72 82 53 13 91 201
[28] 149 153 73 23 28 4 166 163 103 5 4 109 101 44 58 49 50 11 120 4 66 27 132 89 205 110 1
[55] 139 73 9 34 6 29 73 47 51 105 45 101 16 3 19 212 60 144 208 53 56 35 65 31 158 83 195
[82] 10 60 39 12 154 141 185 15 140 48 9 51 36 120 149 172 142 71 26 193 61 5 175 162 141 35 127
[109] 150 103 194 165 157 196 175 66 186 138 99 166 164 136 118 74 46 66 40 57 155 191 139 195 19 175 57
[136] 137 188 50 211 44 149 22 50 15 162 125 49 155 184 168 16 137 208 135 116 110 136 117 196 55 62 55
[163] 149 70 85 23 139 102 107 195 139 52 160 175 159 5 119 55 137 166 131 115 53 119 19 82 87 17 169
[190] 86 156 197 210 30 43 133 54 212 45 29 149 108 30 142 78 42 2 83 102 64 53 172
它的差异向量。n-1项
diff(df$var1)
[1] -109 -60 150 -164 124 11 -49 21 -45 -82 121 -58 44 -14 11 -85 139 43 -78 -118 58 10
[23] -29 -40 78 110 -52 4 -80 -50 5 -24 162 -3 -60 -98 -1 105 -8 -57 14 -9 1 -39
[45] 109 -116 62 -39 105 -43 116 -95 -109 138 -66 -64 25 -28 23 44 -26 4 54 -60 56 -85
[67] -13 16 193 -152 84 64 -155 3 -21 30 -34 127 -75 112 -185 50 -21 -27 142 -13 44 -170
[89] 125 -92 -39 42 -15 84 29 23 -30 -71 -45 167 -132 -56 170 -13 -21 -106 92 23 -47 91
[111] -29 -8 39 -21 -109 120 -48 -39 67 -2 -28 -18 -44 -28 20 -26 17 98 36 -52 56 -176
[133] 156 -118 80 51 -138 161 -167 105 -127 28 -35 147 -37 -76 106 29 -16 -152 121 71 -73 -19
[155] -6 26 -19 79 -141 7 -7 94 -79 15 -62 116 -37 5 88 -56 -87 108 15 -16 -154 114
[177] -64 82 29 -35 -16 -62 66 -100 63 5 -70 152 -83 70 41 13 -180 13 90 -79 158 -167
[199] -16 120 -41 -78 112 -64 -36 -40 81 19 -38 -11 119
现在你可以问:
diff(df$var1)>0
[1] FALSE FALSE TRUE FALSE TRUE TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE TRUE
[19] FALSE FALSE TRUE TRUE FALSE FALSE TRUE TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE FALSE FALSE
[37] FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE FALSE TRUE
[55] FALSE FALSE TRUE FALSE TRUE TRUE FALSE TRUE TRUE FALSE TRUE FALSE FALSE TRUE TRUE FALSE TRUE TRUE
[73] FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE TRUE FALSE
[91] FALSE TRUE FALSE TRUE TRUE TRUE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE TRUE TRUE
[109] FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
[127] TRUE TRUE TRUE FALSE TRUE FALSE TRUE FALSE TRUE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE
[145] FALSE FALSE TRUE TRUE FALSE FALSE TRUE TRUE FALSE FALSE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE
[163] FALSE TRUE FALSE TRUE FALSE TRUE TRUE FALSE FALSE TRUE TRUE FALSE FALSE TRUE FALSE TRUE TRUE FALSE
[181] FALSE FALSE TRUE FALSE TRUE TRUE FALSE TRUE FALSE TRUE TRUE TRUE FALSE TRUE TRUE FALSE TRUE FALSE
[199] FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE TRUE TRUE FALSE FALSE TRUE
由于F=0和T=1,只需使用数字版本并添加前导NA:
df$change <- c(NA,as.numeric(diff(df$var1)>0))
事实上你不需要其他的。。。。但你也可以做到:
df$change2 <- c(NA,ifelse(test = diff(df$var1)>0,yes = 1,no = 0))
试试这个:
var1向量:
df$var1
[1] 212 103 43 193 29 153 164 115 136 91 9 130 72 116 102 113 28 167 210 132 14 72 82 53 13 91 201
[28] 149 153 73 23 28 4 166 163 103 5 4 109 101 44 58 49 50 11 120 4 66 27 132 89 205 110 1
[55] 139 73 9 34 6 29 73 47 51 105 45 101 16 3 19 212 60 144 208 53 56 35 65 31 158 83 195
[82] 10 60 39 12 154 141 185 15 140 48 9 51 36 120 149 172 142 71 26 193 61 5 175 162 141 35 127
[109] 150 103 194 165 157 196 175 66 186 138 99 166 164 136 118 74 46 66 40 57 155 191 139 195 19 175 57
[136] 137 188 50 211 44 149 22 50 15 162 125 49 155 184 168 16 137 208 135 116 110 136 117 196 55 62 55
[163] 149 70 85 23 139 102 107 195 139 52 160 175 159 5 119 55 137 166 131 115 53 119 19 82 87 17 169
[190] 86 156 197 210 30 43 133 54 212 45 29 149 108 30 142 78 42 2 83 102 64 53 172
它的差异向量。n-1项
diff(df$var1)
[1] -109 -60 150 -164 124 11 -49 21 -45 -82 121 -58 44 -14 11 -85 139 43 -78 -118 58 10
[23] -29 -40 78 110 -52 4 -80 -50 5 -24 162 -3 -60 -98 -1 105 -8 -57 14 -9 1 -39
[45] 109 -116 62 -39 105 -43 116 -95 -109 138 -66 -64 25 -28 23 44 -26 4 54 -60 56 -85
[67] -13 16 193 -152 84 64 -155 3 -21 30 -34 127 -75 112 -185 50 -21 -27 142 -13 44 -170
[89] 125 -92 -39 42 -15 84 29 23 -30 -71 -45 167 -132 -56 170 -13 -21 -106 92 23 -47 91
[111] -29 -8 39 -21 -109 120 -48 -39 67 -2 -28 -18 -44 -28 20 -26 17 98 36 -52 56 -176
[133] 156 -118 80 51 -138 161 -167 105 -127 28 -35 147 -37 -76 106 29 -16 -152 121 71 -73 -19
[155] -6 26 -19 79 -141 7 -7 94 -79 15 -62 116 -37 5 88 -56 -87 108 15 -16 -154 114
[177] -64 82 29 -35 -16 -62 66 -100 63 5 -70 152 -83 70 41 13 -180 13 90 -79 158 -167
[199] -16 120 -41 -78 112 -64 -36 -40 81 19 -38 -11 119
现在你可以问:
diff(df$var1)>0
[1] FALSE FALSE TRUE FALSE TRUE TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE TRUE
[19] FALSE FALSE TRUE TRUE FALSE FALSE TRUE TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE FALSE FALSE
[37] FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE FALSE TRUE
[55] FALSE FALSE TRUE FALSE TRUE TRUE FALSE TRUE TRUE FALSE TRUE FALSE FALSE TRUE TRUE FALSE TRUE TRUE
[73] FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE TRUE FALSE
[91] FALSE TRUE FALSE TRUE TRUE TRUE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE TRUE TRUE
[109] FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
[127] TRUE TRUE TRUE FALSE TRUE FALSE TRUE FALSE TRUE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE
[145] FALSE FALSE TRUE TRUE FALSE FALSE TRUE TRUE FALSE FALSE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE
[163] FALSE TRUE FALSE TRUE FALSE TRUE TRUE FALSE FALSE TRUE TRUE FALSE FALSE TRUE FALSE TRUE TRUE FALSE
[181] FALSE FALSE TRUE FALSE TRUE TRUE FALSE TRUE FALSE TRUE TRUE TRUE FALSE TRUE TRUE FALSE TRUE FALSE
[199] FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE TRUE TRUE FALSE FALSE TRUE
由于F=0和T=1,只需使用数字版本并添加前导NA:
df$change <- c(NA,as.numeric(diff(df$var1)>0))
事实上你不需要其他的。。。。但你也可以做到:
df$change2 <- c(NA,ifelse(test = diff(df$var1)>0,yes = 1,no = 0))
如果我理解正确,您可以对数据进行排序,然后使用lag
如果我理解正确,您可以对数据进行排序,然后使用lag
我喜欢基本答案,但有一个简短的演示可能会更有帮助。i、 e.,set.123;x 0L此外,您可能希望解决OP想要的分组问题:avedf$var1,df$cat,FUN=functionx cNA,diffx>0同意。事实上,我曾考虑过采用比OPs更短的向量,但出于某种原因,我的决定有所不同……我喜欢基本答案,但有一个简短的演示可能会更有帮助。i、 e.,set.123;x 0L此外,您可能希望解决OP想要的分组问题:avedf$var1,df$cat,FUN=functionx cNA,diffx>0同意。事实上,我想用一个比OPs短的向量,但由于某种原因,我的决定不同。。。