首页 > 解决方案 > R中的嵌套for循环,其中第二个索引在第一个索引内计数

问题描述

例如,我有一个像这样的数据集:

data <- data.frame(matrix(c(1,2,2,3,4,5,5,"a","a","b","a","a","a","b"), nrow = 7, ncol = 2, byrow = F))

X1  X2
 1  a
 2  a
 2  b
 3  a
 4  a
 5  a
 5  b

然后我添加另一个变量“tag”,最初设置为 0。

data$tag <- 0

X1  X2  tag
 1  a   0
 2  a   0
 2  b   0
 3  a   0
 4  a   0
 5  a   0
 5  b   0

对于重复的每一行,我希望“标签”等于 1,例如:

 X1  X2  tag
     1  a   0
     2  a   1
     2  b   1
     3  a   0
     4  a   0
     5  a   1
     5  b   1

我使用了以下代码:

for (i in data$X1) {
  for (j in 1:length(data$X1)) {
    if (j==2) {data$tag[j] <- 1}
  }
}

但它不像我想的那样工作。我希望第二个循环(j)在前一个循环中工作获得我想要的东西,每次 X1 更改时 j 从 1 开始。我该如何管理它?

非常感谢

标签: rloops

解决方案


也许你可以试试ave

within(
  data,
  tag <- +(ave(X1, X1, FUN = length) > 1)
)

这使

  X1 X2 tag
1  1  a   0
2  2  a   1
3  2  b   1
4  3  a   0
5  4  a   0
6  5  a   1
7  5  b   1

推荐阅读