如何解决如何对矩阵或数据帧中的值进行混洗,以使每个值在每个行/列中仅出现一次?
如何对矩阵或数据帧中的值进行混洗,以使每个值在R中的每一行/列中仅出现一次?
例如,这就是我所拥有的:
A,A,A
B,B,B
C,C,C
D,D,D
E,E,E
F,F,F
G,G,G
我想要什么:
A,D
B,E
C,F
D,G
E,A
F,B
G,C
我要么需要上下移动列并将其换行以保持输入,要么通过某种随机播放功能来完成该操作,即以一种仍可确保行不重复的方式对列进行随机播放。
解决方法
您可以尝试outer
+ %%
产生循环移位
v <- LETTERS[1:4]
out <- matrix(
v[outer(seq_along(v) - 1,seq_along(v) - 1,`+`) %% length(v) + 1],nrow = length(v)
)
这样
> out
[,1] [,2] [,3] [,4]
[1,] "A" "B" "C" "D"
[2,] "B" "C" "D" "A"
[3,] "C" "D" "A" "B"
[4,] "D" "A" "B" "C"
更新 如果矩阵不是正方形,则可以尝试以下代码
v <- LETTERS[1:7]
out <- t(
head(
matrix(
v[outer(seq_along(v) - 1,nrow = length(v)
),4
)
)
给出
> out
[,] "B" "C" "D" "E"
[3,] "C" "D" "E" "F"
[4,] "D" "E" "F" "G"
[5,] "E" "F" "G" "A"
[6,] "F" "G" "A" "B"
[7,] "G" "A" "B" "C"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。