假设在一个数据帧中我有,(它们是字符串)
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