在R中为特殊情况编写for循环

时间:2016-08-08 02:28:27

标签: r loops for-loop

如果某些数据框包含类似

的值
a
1
5
7
9

数据帧b需要从数据框中提取,如

If a is less than equals to 10 than b is 1:10
If a is less than equals to 14 than b is 11:14
If a is less than equals to 29 than b is 15:29

,结果应该反映为

b
1
2
3
4
5
6
7
8
9
10

任何线索都将受到赞赏

2 个答案:

答案 0 :(得分:3)

我们可以尝试

f1 <- function(x){
       v1 <- max(x)
       v2 <- if(v1 < 10) 1:10 else if(v1 < 14) 11:14 else 15:29 
       data.frame(b = v2)
}

f1(df1$a)
#    b
#1   1
#2   2
#3   3
#4   4
#5   5
#6   6
#7   7
#8   8
#9   9
#10 10

答案 1 :(得分:3)

如果a的所有值都小于14,那么您是否希望b = 1:10的所有值小于a,并且b = 11:14的所有值都是a b = 15:29小于29 df <- data.frame(a = c(1,5,7,9)) if (sum(df$a < 10) == nrow(df)) { b = data.frame(1:10) } else if (sum(df$a < 14) == nrow(df)) { b = data.frame(11:14) } else if (sum(df$a < 29) == nrow(df)) { b = data.frame(15:29) } :请查看以下代码了解详情

> b
   X1.10
1      1
2      2
3      3
4      4
5      5
6      6
7      7
8      8
9      9
10    10

以上代码是:

SELECT hdr.*, det.*, othr.*  
FROM testHdr hdr
LEFT JOIN testDet det
    ON hdr.adj_no = det.adj_no AND
       hdr.adj_no2 = det.adj_no2
LEFT JOIN testOther othr
--  ON <some condition>
WHERE i.key3 = det.key3 AND
      hdr.adj_no = '112'

希望这会对您有所帮助,否则请告诉我您的具体要求。