在R中返回数据框中值的位置

时间:2015-02-02 16:47:09

标签: r for-loop

我有一个包含五列数据的数据框,我想找到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" part' 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

1 个答案:

答案 0 :(得分:2)

你可以尝试

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

更新

假设您要减去&#34; max&#34; &#34; No。&#34;的价值来自&#34; lst&#34;元素

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

或者

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