三维阵列在R



假设在一个数据帧中我有,(它们是字符串)

data1<-data.frame(c("number1","number2"),c("dog,cat","pigeon,leopard"))

另一个数据帧是

 data2<-data.frame(c("pigeon","leopard","dog","cat"),
                   c("5 6 7 8","10 11 12 13","1 2 3 4","5 6 7 8"))

data2:

pigeon      5  6  7  8
leopard    10  11 12 13
dog         1  2   3  4
cat        5   6  7  8

我的期望输出是一个三维矩阵,它会给我:

i = number1/科学

j= i

对应的字符串

k=第二个数据帧的值。

也就是说,如果我选择number1,我将有

dog   1 2 3 4 
cat   5 6 7 8 

似乎你只是想要一个额外的列在data2与"number1"one_answers"number2"在正确的地方,而不是真正的3d数组。

data2 <- data.frame(j = c("pigeon","leopard","dog","cat"), 
                    k = c("5 6 7 8","10 11 12 13","1 2 3 4","5 6 7 8"), 
                    i = c("number2", "number2", "number1", "number1")) 

然后你可以使用

为"number1"选择所有内容
data2[data2$i == "number1", ]

如果您不希望在结果中包含i列,您可以这样做:

data2[data2$i == "number1", ][c("j", "k")]
##     j       k
## 3 dog 1 2 3 4
## 4 cat 5 6 7 8

我不确定我理解你的问题,但如果你想在data2中按数字选择data1,你可以做

lapply(seq_along(data1[, 1]), function(i) data2[data2[, 1] %in% strsplit(as.character(data1[i, 2]), ",")[[1]],])

将解析为一个矩阵列表

# [[1]]
# c..pigeon....leopard....dog....cat.. c..5.6.7.8....10.11.12.13....1.2.3.4....5.6.7.8..
# 3                                  dog                                           1 2 3 4
# 4                                  cat                                           5 6 7 8
# 
# [[2]]
# c..pigeon....leopard....dog....cat.. c..5.6.7.8....10.11.12.13....1.2.3.4....5.6.7.8..
# 1                               pigeon                                           5 6 7 8
# 2                              leopard                                       10 11 12 13

相关内容

  • 没有找到相关文章

最新更新