-1

我一直在研究以下列方式表示的数据集:

P1  P2  P3  P4  P5
0   2   1   0   1
0   1   0   0   0
0   0   0   3   0 
0   0   0   1   1
0   0   5   0   0
1   1   0   0   0

我正在尝试将其转换为 R 中虚拟变量不为 0 的行,例如:

P2,P3,P5
P2
P4
P4,P5
P3
P1,P2

我尝试了以下方法:将虚拟变量重新编码为有序因子,但是,我没有得到多个项目。我很高兴生成一个没有任何列名的新事务表。我希望对生成的数据集进行购物篮分析。

谢谢

4

2 回答 2

3

你可以试试:

apply(df,1,function(x) toString(names(df)[as.logical(x)]))
#[1] "P2, P3, P5" "P2"         "P4"         "P4, P5"     "P3"         "P1, P2" 

数据:

df = structure(list(P1 = c(0L, 0L, 0L, 0L, 0L, 1L), P2 = c(2L, 1L, 
0L, 0L, 0L, 1L), P3 = c(1L, 0L, 0L, 0L, 5L, 0L), P4 = c(0L, 0L, 
3L, 1L, 0L, 0L), P5 = c(1L, 0L, 0L, 1L, 0L, 0L)), .Names = c("P1", 
"P2", "P3", "P4", "P5"), class = "data.frame", row.names = c(NA, 
-6L))   
于 2015-10-07T15:54:30.790 回答
2

或者

A <- matrix(c(0,1,0,1,
              2,0,0,3,
              1,2,1,5), nrow=3, ncol=4)
colnames(A) <- paste("P",1:4, sep = "")


apply(A, 1, function(x) { names(x[which(x!=0)]) })

输出一个列表:

[[1]]
[1] "P2" "P4"

[[2]]
[1] "P1" "P2" "P3" "P4"

[[3]]
[1] "P3" "P4"
于 2015-10-07T15:58:44.043 回答