我在R中有一个数据帧,它有(例如)10行10列。 dataframe中的值将为0或1。
例如
1 0 0 1 0 0 0 0 1 1
0 1 0 1 0 1 0 1 0 1
...
现在我想以这种格式
将此数据输出到新文件1 1
1 4
1 9
1 10
2 2
2 4
2 6
2 8
2 10
....
这里的输出格式是(行索引,col索引),其中value是1。
我这样做是因为'循环,但处理速度太慢。是否有任何矢量/矩阵运算或其他可以更快完成的包?
提前致谢。
答案 0 :(得分:0)
您可以使用apply
个功能:
## For the following matrix
df <- matrix(sample(c(0,1), 25, replace = TRUE), 5, 5)
df
# [,1] [,2] [,3] [,4] [,5]
# [1,] 0 1 0 0 0
# [2,] 0 1 0 1 1
# [3,] 0 0 0 0 0
# [4,] 0 0 1 1 1
# [5,] 1 0 0 1 1
## The positions of the "1" in the columns
col <- apply(df, 1, function(X) which(X == 1))
## The number of "1" per rows
rows1 <- lapply(col, length)
rows2 <- lapply(as.list(1:length(rows1)), function(X, rows1) rep(X, rows1[[X]]), rows1)
## Combining both
cbind(unlist(rows2), unlist(col))
# [,1] [,2]
# [1,] 1 2
# [2,] 2 2
# [3,] 2 4
# [4,] 2 5
# [5,] 4 3
# [6,] 4 4
# [7,] 4 5
# [8,] 5 1
# [9,] 5 4
#[10,] 5 5