在 R return 数据框中值的位置

in R return position of values in a data frame

我有一个包含五列数据的数据框,我想找到 1 到 20 之间的数字所在的位置(例如) 对于我使用过的一个实例(我在堆栈溢出时发现的东西)

Filter( function(data) length(data)>1, split(data$No., data$N1))$`1`

首先,我正在尝试获取在指定 N1 的列中查找 1:20 的函数。 我试过:

    data.occurence = NULL

for (i in min(data$N1):max(data$N1) ) {
    i = i
    data.occurence[i] = Filter( function(data) length(data)>1, split(data$No., data$N1))$`i`
    data.occurence[i]   
    }

这对我没有任何帮助。我知道 "for" 部分 'works' - 我希望得到 data.occurence[1] 以及找到值的 ID 等 i = 1:20。 我还希望该函数能够遍历五列中的每一列,每次重复相同的搜索 示例数据:

      No.        dat N1 N2 N3 N4 N5 N6 BN
1    1994 2015-01-31  7 10 16 33 39 44 15
2    1993 2015-01-28  3  4 17 24 30 34 36
3    1992 2015-01-24  4  8 19 35 44 49 17
4    1991 2015-01-21  1  6 32 34 37 45 26
5    1990 2015-01-17 29 37 42 46 47 49  4
6    1989 2015-01-14 17 20 28 29 33 36 23
7    1988 2015-01-10 13 14 16 24 41 43 39
8    1987 2015-01-07  4  5 10 12 20 23 24

运行:

Filter( function(data) length(data)>1, split(data$No., data$N1))$`4`

给出在 N1 列中包含 4 的行的 id 的结果:

[1] 1992 1987 1977 1961 1960 1957

你可以试试

 lst <- lapply(paste0('N', 1:6), function(x)
        Filter(function(data) length(data)>1, split(data$No., data[x])))

更新

假设您要从 "lst" 元素中减去 "No." 的 "max" 值

 mx <- max(data$No.)
 lapply(lst, function(x) mx-unlist(x))

或者

 lapply(lst, function(x) lapply(x, function(.x) mx-.x))