根据值

时间:2018-02-07 05:33:15

标签: r dataframe subset

我在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。

我这样做是因为'循环,但处理速度太慢。是否有任何矢量/矩阵运算或其他可以更快完成的包?

提前致谢。

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