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