R中的三维数组

时间:2014-06-25 12:19:03

标签: r multidimensional-array

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

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 = NUM​​BER1 /数字2

j =与i

对应的字符串

k =第二个数据帧的值。

如果我选择number1,那将是我的,

dog   1 2 3 4 
cat   5 6 7 8 

2 个答案:

答案 0 :(得分:0)

您似乎只想在data2中添加一个额外的列,其中“number1”和“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

答案 1 :(得分:0)

我不确定我是否理解您的问题,但如果您想在data1 data2中选择数字{/ 1}},那么

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