【发布时间】:2017-06-07 10:44:02
【问题描述】:
这是我的示例数据
> data.frame
a b c d
W_1_N NA NA NA NA
W_1_E 2 2 2 4
W_1_C 4 2 2 4
W_1_D NA NA NA NA
首先我必须组合矩阵中的元素以获得它们的列名对,其中一个元素是 4,另一个元素是 2 在同一行中。
结果是这样的
W_1_E.1 d a
W_1_E.2 d b
W_1_E.3 d c
W_1_C.1 a b
W_1_C.2 a c
W_1_C.3 d b
W_1_C.4 d c
我只想要在同一行中一个元素为 4,另一个元素为 2 的对。 W_1_N 和 W_1_D 只有 NA 所以被省略了。 W_1_E 出现在 3 行中,因为样本数据行中有 3 对 (4,2)。W_1_C 有 4 对。
这是代码:
lst=data.frame(df) %>%
rownames_to_column("rn") %>%
drop_na() %>%
gather(key, value, -rn) %>%
group_by(rn, value) %>%
summarise(l = list(unique(key))) %>%
split(.$rn)
pair=do.call("rbind", lapply(lst, function(x) expand.grid(x$l[[1]],
x$l[[2]])))
效果很好,但现在我有了第二个 data.frame:
a b c d
W_1_N 0 1 1 1
W_1_E 1 1 0 0
W_1_C 1 1 1 0
W_1_D 1 0 1 1
这是我的问题,我只想得到这对,其中对的两个元素的值在第二个 data.frame 中都是 1。例如,我的第一对结果W_1_E.1 d a 应该被消除,因为d 在第二个data.frame 的W_1_E 行中具有0 的值。
输出应该是:
W_1_C.1 a b
W_1_C.2 a c
d 在W_1_E 行中具有值0,因此在我的结果data.frame 中所有带有W_1_E 的行都被消除(所有par 都带有d)。最后两行被删除,因为d 也是第二个数据帧中W_1_C 行中的0。
感谢您的帮助
【问题讨论】:
-
您的预期输出是什么?是第一个例子之后的那个吗
-
我的预期输出是第一个示例之后的输出,但仅限于这对,其中对的两个元素的值都是 1。
-
@akrun 你知道怎么做吗?