【发布时间】:2015-04-18 14:21:04
【问题描述】:
我有一个这样的数据框:
id class
146 H02J
146 F03D
146 F03D
287 F16F
287 F16F
1040 F03D
1040 F16D
1040 F03D
1042 F03D
1042 G01W
1042 F03D
1042 F03D
1042 F03D
1816 G06F
1816 H04Q
1816 H04L
1816 H04W
现在我想用数值构建向量,每个向量代表一个应用程序,每个数值代表一个class。
由于向量的长度不同,我无法用我的 R 技能定义向量的矩阵,我感谢解决这个问题的想法。
输出应该是这样的矩阵,目的是确定向量之间的距离。
> mat
[,1] [,2] [,3] [,4] [,5]
[1,] 6 1 1 NA NA
[2,] 3 3 NA NA NA
[3,] 1 2 1 NA NA
[4,] 1 4 1 1 1
[5,] 5 8 7 9 NA
我得到了这个:
v1 <- subset(num, id==146)
v2 <- subset(num, id==287)
v3 <- subset(num, id==1040)
v4 <- subset(num, id==1042)
v5 <- subset(num, id==1816)
list <- list(c(v1), c(v2), c(v3), c(v4), c(v5))
list
max.length <- max(sapply(list, length))
list <- lapply(list, function(x) { c(x, rep(NA, max.length-length(x)))})
do.call(rbind, list)
mat <- do.call(rbind, list)
但该解决方案不仅适用于这五个示例,还适用于大量 id(向量),无需手动输入 id 的数量。
【问题讨论】:
-
我无法重现这个。我没有看到这个“num”对象。看起来您只有一个尚未在循环/*应用中的操作(因此可推广到更多向量)。像
mylist <- lapply(unique(df$ids),function(i)subset(num,id==i))这样的东西可能适用于此。顺便说一句,您可能不想将您的列表命名为“列表”。
标签: r matrix vector distance variable-length