我的数据框在单元格中包含"0"值.我需要调出值(字母/非零的)和相应的票号.数据框(m)看起来像:(请注意:列名与其值类似)
a1 b1 c1 d1 e1 f1 g1 h1 i1 j1 k1 l1
TKT1 a1 b1 0 d1 0 0 0 h1 0 0 k1 0
TKT2 0 b1 0 0 e1 0 g1 h1 0 j1 k1 0
TKT3 a1 0 0 d1 e1 0 g1 h1 i1 0 k1 l1
Run Code Online (Sandbox Code Playgroud)
生成数据集的代码:
#sample data
m <- matrix(sample(0:1, 12*3, replace=T), ncol=12)
colnames(m) <- c("a1", "b1", "c1", "d1", "e1", "f1", "g1", "h1", "i1", "j1", "k1", "l1")
rownames(m) <- c("TKT1","TKT2","TKT3")
#replacement
ones <- which(m==1, arr.ind=T)
m[ones]<-colnames(m)[ones[,2]]
m <- as.data.frame(m)
Run Code Online (Sandbox Code Playgroud)
我想要的输出格式是:
Tickets Values
TKT1 a1
TKT1 b1
TKT1 d1
TKT1 h1
TKT1 k1
TKT2 b1
TKT2 e1
TKT2 g1
TKT2 h1
TKT2 j1
TKT2 k1
TKT3 a1
TKT3 d1
TKT3 e1
TKT3 g1
TKT3 h1
TKT3 i1
TKT3 k1
TKT3 l1
Run Code Online (Sandbox Code Playgroud)
我想到的一种方法是删除数据框中的单元格(如果它们包含0),然后向左移动所有数据.我不知道该怎么办.
这可以在r一行中完成:
setNames(expand.grid(dimnames(m))[m != "0",], c("Tickets", "Values"))
Run Code Online (Sandbox Code Playgroud)
expand.grid给出行名和列名的所有组合,然后m != "0"选择非零的条目. setNames给列命名.
| 归档时间: |
|
| 查看次数: |
461 次 |
| 最近记录: |