我需要打乱数据框的行,将其转为:
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
功能(与 vanilla 不同)以我想要的方式洗牌数据框,但似乎搞砸了打印:
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
如果我使用 vanilla 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")