1

すべてのコミュニティにこんにちは。フォーラムで検索しましたが、この「簡単な」質問を検索できませんでした。すでに同様の質問があるのでしょうか?私は次のデータフレームを持っています:

ID<-c(rep(seq(1:5),4))
LAB<-c("A","B","C","A")
datain<-data.frame(cbind(ID,LAB))

IDごとに重複することなく異なる値(LAB)を取得する関数がRに存在するかどうかを知りたいですか?好き:

ID<-c(rep(seq(1:5),4))
LAB<-c("A B C")
dataout<-data.frame(cbind(ID,LAB))
dataout
ID   LAB
1   1 A B C
2   2 A B C
3   3 A B C
4   4 A B C
5   5 A B C
6   1 A B C
7   2 A B C
8   3 A B C
9   4 A B C
10  5 A B C
11  1 A B C
12  2 A B C
13  3 A B C
14  4 A B C
15  5 A B C
16  1 A B C
17  2 A B C
18  3 A B C
19  4 A B C
20  5 A B C

以前に出力を指定していなかったことをお詫びします!!!

いつものようにどんな助けでも大歓迎です!

4

2 に答える 2

2

出力をどのように表示するかを指定しません。

いくつかのオプションがあります。ここに2つあります:

aggregate(as.character(LAB) ~ ID, data, c, simplify = FALSE)
#   ID as.character(LAB)
# 1  1        A, B, C, A
# 2  2        B, C, A, A
# 3  3        C, A, A, B
# 4  4        A, A, B, C
# 5  5        A, B, C, A
with(data, tapply(as.character(LAB), ID, FUN = c))
# $`1`
# [1] "A" "B" "C" "A"
# 
# $`2`
# [1] "B" "C" "A" "A"
# 
# $`3`
# [1] "C" "A" "A" "B"
# 
# $`4`
# [1] "A" "A" "B" "C"
# 
# $`5`
# [1] "A" "B" "C" "A"

table「ID」による各「LAB」の頻度にのみ関心がある場合は、満足している可能性もあります。

table(data)
#    LAB
# ID  A B C
#   1 2 1 1
#   2 2 1 1
#   3 2 1 1
#   4 2 1 1
#   5 2 1 1

必要な出力に基づいて更新

出力をどのように表示するかを示したので、おそらくこれを試すことができます。

newout <- merge(datain, 
                aggregate(as.character(LAB) ~ ID, datain, 
                          function(x) paste(sort(unique(x)), collapse = " "), 
                          simplify = FALSE))
head(newout)
#   ID LAB as.character(LAB)
# 1  1   A             A B C
# 2  1   B             A B C
# 3  1   C             A B C
# 4  1   A             A B C
# 5  2   A             A B C
# 6  2   B             A B C
于 2013-02-07T18:05:26.720 に答える
1

私はあなたが探していると思いますsplit

with(datain, split(LAB, ID))
# $`1`
# [1] A B C A
# Levels: A B C
# 
# $`2`
# [1] B C A A
# Levels: A B C
# 
# $`3`
# [1] C A A B
# Levels: A B C
# 
# $`4`
# [1] A A B C
# Levels: A B C
# 
# $`5`
# [1] A B C A
# Levels: A B C

それぞれIDに異なる数のLABsがある可能性があるため、出力はリストになります。

編集:一意の値のみが必要であるように見えるので、次のようにします。

with(unique(datain), split(LAB, ID))

ファクターを取得したくない場合は、次のようにします。

with(unique(datain), split(as.character(LAB), ID))
于 2013-02-07T18:03:33.260 に答える