假设我有一个数据框,(它们是字符串)
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 /数字2
j =与i
对应的字符串k =第二个数据帧的值。
如果我选择number1,那将是我的,
dog 1 2 3 4
cat 5 6 7 8
答案 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