【发布时间】:2018-10-23 21:06:07
【问题描述】:
我有一个如下所示的数据框:
df_start <- data.frame(
a = c(1, 1, 1, 1, 1),
b = c(0, 1, 0, 0, 0),
c = c(1, 0, 0, 0, 0),
n = c(0, 0, 0, 1, 0))
如果df_start[,2:n] 中的任何列(其中 n 显示数据帧的最后一列)等于 df$a,我想测试条件,然后创建两个新列,其中第一个列返回 1,如果条件为 TRUE,否则为 0,另一个给出条件为 TRUE 的列的名称。
我设法创建了这样的第一列:
library(dplyr)
# check condition
df_start <- df_start %>% mutate(cond = ifelse(a == b | a == c | a == n, 1, 0))
尽管我认为我需要一种不同的方法,因为我可能每次都有不同数量的列。所以我需要测试a 列以及从第 2 列到最后一列的所有列的条件,但我还需要知道满足哪个列的条件。
期望的输出:
# desired output
df_end <- data.frame(a = c(1, 1, 1, 1, 1),
b = c(0, 1, 0, 0, 0),
c = c(1, 0, 0, 0, 0),
n = c(0, 0, 0, 1, 0),
cond = c(1,1,0,1,0),
col_name = c("c", "b", NA, "n", NA))
有没有办法用 dplyr 或 base R 来做到这一点?尽管赞赏任何其他解决方案。
【问题讨论】: