これを回して、データ フレームの行をシャッフルする必要があります。
A foo
B bar
C baz
これに:
B foo
C bar
A baz
つまり、最初の列をシャッフルし、残りはそのままにしておく必要があります。ここで提案されているようsample()
に、ライブラリから使用してこれを行っています。最小限の作業コードの例は次のとおりです。kimisc
>df<-read.table("file1", header=F, skip=1)
>library(kimisc)
>names<-read.table("file2")
>df1<- transform(sample(df,size=nrow(names)),V1=names)
>df1
V1 V2
5 A 21266
8 C 22109
7 F 17971
1 J 11137
どこfile1
ですか
Name Value
A 28463
B 11137
C 24966
D 24611
E 14980
F 21266
G 23441
H 17971
I 22109
J 31746
そしてfile2
次のとおりです。
A
C
F
J
次に、このデータフレームをファイルに書き込みたいのですが、期待される出力は
A 21266
C 22109
F 17971
J 11137
ただし、kimisc
ライブラリをロードすると、(バニラとは異なり)データフレームを希望どおりにシャッフルする独自のsample
機能が提供されますが、印刷が台無しになるようです。
write.table(df1,"file3", quote=F, sep='\t', col=FALSE)
これにより、次の出力が生成されます。
5 1:4 21266
8 1:4 22109
7 1:4 17971
1 1:4 11137
バニラを使用すると、sample
生成されたデータ フレームは期待どおりに出力されますが、必要な方法でシャッフルされません (つまり、行ではなく列がシャッフルされます)。
では、データ フレームの列ではなく行をサンプリングできるようにするためsample
にどのように使用できますか?kimisc
write.table
base::sample
PS.私は実際に143558041行を含むファイルからそのファイルに記載されている名前のサブセット(39953)にランダムな値を割り当てようとしているため、名前のリストを使用しています。
要求に応じて、の出力dput(df1)
は
> dput(df1)
structure(list(V1 = structure(list(V1 = structure(1:4, .Label = c("A",
"C", "F", "J"), class = "factor")), .Names = "V1", class = "data.frame", row.names = c(NA,
-4L)), V2 = c(24611L, 14980L, 22109L, 21266L)), .Names = c("V1",
"V2"), row.names = c(3L, 4L, 8L, 5L), class = "data.frame")