Rには次のデータフレームがあります。
> str(df)
'data.frame': 545227 obs. of 15 variables:
$ ykod : int 93 93 93 93 93 93 93 93 93 93 ...
$ yad : Factor w/ 42 levels "BAKUGAN","BARBIE",..: 30 30 30 30 30 30 30 30 30 30 ...
$ per : Factor w/ 3 levels "2 AYLIK","3 AYLIK",..: 3 3 3 3 3 3 3 3 3 3 ...
$ donem: int 201101 201101 201101 201101 201101 201101 201101 201101 201101 201101 ...
$ sayi : int 201101 201101 201101 201101 201101 201101 201101 201101 201101 201101 ...
$ mkod : int 4 5 9 11 12 18 20 22 25 26 ...
$ mad : Factor w/ 10464 levels " Defne Market ",..: 405 8075 9710 10145 9297 7973 2542 3892 2759 5769 ...
$ mtip : Factor w/ 29 levels "Abone Bürosu ",..: 2 20 20 2 2 2 2 2 2 2 ...
$ kanal: Factor w/ 2 levels "OB","SS": 2 2 2 2 2 2 2 2 2 2 ...
$ bkod : int 110565 110565 110565 110565 110565 110565 110565 110565 110565 110565 ...
$ bad : Factor w/ 212 levels "4. Levent","500 Evler",..: 167 167 167 167 167 167 167 167 167 167 ...
$ bolge: Factor w/ 12 levels "Adana Şehiriçi",..: 7 7 7 7 7 7 7 7 7 7 ...
$ sevk : int 2 3 3 3 2 2 2 6 2 2 ...
$ iade : int 2 1 0 2 0 2 1 0 0 2 ...
$ satis: int 0 2 3 1 2 0 1 6 2 0 ...
選択した複数の変数の一意の値(SQLのDISTINCTなど)を一覧表示したい。たとえば、unique(yad)
は42個の各要素の名前を提供しますが、2つの列を抽出する必要があります(yad
とper
を一緒に、すべての一意の組み合わせで):
yad per
--- ---
BARBIE AYLIK
BAKUGAN 2 AYLIK
MICKEY MOUSE 2 AYLIK
TINKERBELL 3 AYLIK
... ...
どうすればこれを達成できますか?
unique()
自体を使用してはどうですか?
df <- data.frame(yad = c("BARBIE", "BARBIE", "BAKUGAN", "BAKUGAN"),
per = c("AYLIK", "AYLIK", "2 AYLIK", "2 AYLIK"),
hmm = 1:4)
df
# yad per hmm
# 1 BARBIE AYLIK 1
# 2 BARBIE AYLIK 2
# 3 BAKUGAN 2 AYLIK 3
# 4 BAKUGAN 2 AYLIK 4
unique(df[c("yad", "per")])
# yad per
# 1 BARBIE AYLIK
# 3 BAKUGAN 2 AYLIK
これは、ジョシュの答えへの追加です。
また、data.tableの重複行をフィルターで除外しながら、他の変数の値を保持することもできます。
例:
library(data.table)
#create data table
dt <- data.table(
V1=LETTERS[c(1,1,1,1,2,3,3,5,7,1)],
V2=LETTERS[c(2,3,4,2,1,4,4,6,7,2)],
V3=c(1),
V4=c(2) )
> dt
# V1 V2 V3 V4
# A B 1 2
# A C 1 2
# A D 1 2
# A B 1 2
# B A 1 2
# C D 1 2
# C D 1 2
# E F 1 2
# G G 1 2
# A B 1 2
# set the key to all columns
setkey(dt)
# Get Unique lines in the data table
unique( dt[list(V1, V2), nomatch = 0] )
# V1 V2 V3 V4
# A B 1 2
# A C 1 2
# A D 1 2
# B A 1 2
# C D 1 2
# E F 1 2
# G G 1 2
警告:他の変数に異なる値の組み合わせがある場合、結果は次のようになります。
v1とV2のユニークな組み合わせ
一連の要因の一意の組み合わせをすべて取得する方法はいくつかあります。
with(df, interaction(yad, per, drop=TRUE)) # gives labels
with(df, yad:per) # ditto
aggregate(numeric(nrow(df)), df[c("yad", "per")], length) # gives a data frame