如何编写for循环以遍历R中的列

时间:2019-02-06 04:05:19

标签: r

我想遍历一列。对于该列的每个值,测试数据中都有一个对应的列。我想找到对应的列,然后将副本复制到我刚创建的新列中。以下是我所做的。但是存在语法错误,因为我不知道如何使用R正确遍历一列。

  for (i in test$Position) {
    value1 <- test[i] 
    index <- which(names(test)== value1)
    res <- test[i,index]
    test$newCoulumn [i]=res

}

enter image description here

test <- structure(list(cc = c(90, 94, 87, 85, 86, 80, 92, 76, 90, 81, 
67), ST = c(90, 94, 87, 85, 86, 80, 92, 76, 90, 81, 67), RS = c(90, 
94, 87, 85, 86, 80, 92, 76, 90, 81, 67), LW = c(94, 92, 92, 90, 
92, 88, 91, 73, 86, 84, 64), LF = c(95, 93, 92, 90, 91, 87, 92, 
74, 89, 85, 65), CF = c(95, 93, 92, 90, 91, 87, 92, 74, 89, 85, 
65), RF = c(95, 93, 92, 90, 91, 87, 92, 74, 89, 85, 65), RW = c(94, 
92, 92, 90, 92, 88, 91, 73, 86, 84, 64), Position = c("RF", "ST", 
"LW", "RF", "LF", "RW", "RS", "CF", "ST", "cc", "RW")), row.names = c(NA, 
-11L), class = c("tbl_df", "tbl", "data.frame"))

test

    cc  ST  RS  LW  LF  CF  RF  RW  Position
    90  90  90  94  95  95  95  94  RF
    94  94  94  92  93  93  93  92  ST
    87  87  87  92  92  92  92  92  LW
    85  85  85  90  90  90  90  90  RF
    86  86  86  92  91  91  91  92  LF
    80  80  80  88  87  87  87  88  RW
    92  92  92  91  92  92  92  91  RS
    76  76  76  73  74  74  74  73  CF
    90  90  90  86  89  89  89  86  ST
    81  81  81  84  85  85  85  84  cc
    67  67  67  64  65  65  65  64  RW

1 个答案:

答案 0 :(得分:0)

我确定必须有一个purrr :: map2版本,但是我认为将两个向量(一个位置值列和另一个行索引)发送到“ [”的任务非常简单。唯一的陷阱似乎是mapply值需要不公开。我认为可能会有一个simple2array参数会做同样的事情。

test$Pos_val <- unlist(mapply(function(x,y){test[y,x]}, x=test$Position, y=1:nrow(test)))
> test
# A tibble: 11 x 10
      cc    ST    RS    LW    LF    CF    RF    RW Position Pos_val
   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>      <dbl>
 1    90    90    90    94    95    95    95    94 RF            95
 2    94    94    94    92    93    93    93    92 ST            94
 3    87    87    87    92    92    92    92    92 LW            92
 4    85    85    85    90    90    90    90    90 RF            90
 5    86    86    86    92    91    91    91    92 LF            91
 6    80    80    80    88    87    87    87    88 RW            88
 7    92    92    92    91    92    92    92    91 RS            92
 8    76    76    76    73    74    74    74    73 CF            74
 9    90    90    90    86    89    89    89    86 ST            90
10    81    81    81    84    85    85    85    84 cc            81
11    67    67    67    64    65    65    65    64 RW            64