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