2

私が持っているとしましょう:

df <- data.frame(x = rep(as.factor(LETTERS[1:3]), c(1, 2, 3)))

df:
  x
1 A
2 B
3 B
4 C
5 C
6 C

同じ文字に基づいて別の列(グループID)を追加するにはどうすればよいですかdf$x

  x group
1 A 1
2 B 2
3 B 2
4 C 3
5 C 3
6 C 3

ありがとう!

- - - - - - -編集 - - - - - - -

申し訳ありませんが、質問を言い換える必要があると思います。ここにあります:

df <- data.frame(x = rep(as.factor(LETTERS[1:3]), c(1, 2, 3)),
                 y = rep(as.factor(LETTERS[3:1]), c(3, 2, 1)))

df
  x y
1 A C
2 B C
3 B C
4 C B
5 C B
6 C A

そして、xとyのペアを区切るためにグループIDの列が必要です。

df
  x y group
1 A C 1
2 B C 2
3 B C 2
4 C B 3
5 C B 3
6 C A 4

手伝ってくれてありがとう!

4

2 に答える 2

4

私はこれがあなたが探しているものだと思います:

df$group = df$x:df$y
#  x y group
#1 A C   A:C
#2 B C   B:C
#3 B C   B:C
#4 C B   C:B
#5 C B   C:B
#6 C A   C:A

groupこの場合は要因です。数値IDが必要な場合:

df$group = as.numeric(df$x:df$y)
#  x y group
#1 A C     3
#2 B C     6
#3 B C     6
#4 C B     8
#5 C B     8
#6 C A     7

ETA:グループIDを連続した整数にする場合:

df$group = match(df$x:df$y, unique(df$x:df$y))
#  x y group
#1 A C     1
#2 B C     2
#3 B C     2
#4 C B     3
#5 C B     3
#6 C A     4
于 2012-08-25T01:04:27.230 に答える
1

これはどう:

df$group <- as.numeric(factor(with(df, paste(x,y))))

...他のソリューションと非常によく似ています。

于 2012-08-25T04:14:11.587 に答える