R包public void another() {
int a[][] = new int[][] {
{-1, 2, 3, -4},
{-3, 5, 6, -8},
{-9, 2, 3, -1},
{-7, 2, 3, -9}};
System.out.println(Arrays.deepToString(a));
int sum = 0;
int min = 0; int min_j = 0;
int kol = 0, firstNeg_i = 0, nextNeg_i = 0;
int firstNeg_j = 0, nextNeg_j = 0;
if (a[0][0] < 0) {
kol++;
firstNeg_i = 0; firstNeg_j = 0;
}
for (int i = 1; i < a.length; i++) {
for(int j = 1; j < a.length; j++) {
if (a[min][min_j] > a[i][j]) {
min = i;
min_j = j;
}
if ((a[i][j] < 0) && kol < 1) {
firstNeg_i = i;
firstNeg_j = j;
kol++;
i++; j++;
}
if ((a[i][j] < 0) && kol < 2) {
nextNeg_i = i; nextNeg_j = j;
kol++;
}
}
}
for (int i = firstNeg_i + 1; i < nextNeg_i; i++) {
for (int j = firstNeg_j + 1; j < nextNeg_j; j++) {
sum += a[i][j];
//System.out.println(sum);
}
}
System.out.println(sum);
}
具有函数data.table
,该函数为向量的每个元素分配一个整数,而相邻的相同值元素将获得相同的整数。希望R中的这个示例可以解释rleid
的作用,这里的rleid
是y
。
rleid(x)
在SAS中为以下数据集创建library(data.table)
ex <- data.frame(x = c(1, 1, 4, 4, 1, 3, 3, 4, 4, 4, 1))
ex$y <- rleid(ex$x)
print(ex)
# x y
# 1 1 1
# 2 1 1
# 3 4 2
# 4 4 2
# 5 1 3
# 6 3 4
# 7 3 4
# 8 4 5
# 9 4 5
# 10 4 5
# 11 1 6
的最佳方法是什么? (此处y
与R示例相同)
x
答案 0 :(得分:4)
只需将BY
语句与NOTSORTED
选项一起使用。
data want ;
set have ;
by x notsorted ;
y + first.x ;
run;
答案 1 :(得分:3)
您可以在此处使用BY组处理来添加计数器。 “按组”有一个称为“未分类”的选项,可让您考虑不合逻辑顺序的组。
data want;
set ex;
by x notsorted;
if first.x then count+1;
run;
https://stats.idre.ucla.edu/sas/faq/how-can-i-create-an-enumeration-variable-by-groups/
答案 2 :(得分:1)
另一种方法。
data b;
set ex;
if lag(x)=x then count+0;
else count+1;
run;