r - 数据帧的按列过滤

标签 r dataframe dplyr

我有以下 df。

empid  cond1  cond2  cond3 cond4
234     1      0      1     1
7890    2      1      1     0
38476   1      1      0     1
456     0      1      1     0

empid 列是字符类型,其余都是数字列。 我需要每个 cond1、cond2、cond3 和 cond4 的值大于 0 的 empid 列表。 现在,我正在创建 2:5 的列名称列表,使用 for 循环 遍历列,选择然后过滤该特定列。

我觉得使用 lapply 可以更有效地完成它,但我不确定如何包含要选择的列,因为我的结果中只需要 empid 列。

作为输出,有效的可能是一个新的列表对象,其中包含 empid 过滤的值。 因此,例如: 新列表对象,

cond1 <- "234","7890","38476"

提前谢谢您。

最佳答案

这是通过基础 R 的解决方案,

aggregate(empid ~ ind, subset(cbind(empid = df$empid, stack(df[-1])), values > 0), list)

#    ind            empid
#1 cond1 234, 7890, 38476
#2 cond2 7890, 38476, 456
#3 cond3   234, 7890, 456
#4 cond4       234, 38476

注意:

如果我们将empid保留为一个字符,它会将stack与factor混淆。为了避免这种情况,我们可以在子集中添加as.integer(),即

aggregate(empid ~ ind, subset(cbind(empid = as.integer(df$empid), stack(df[-1])), values > 0), list)

关于r - 数据帧的按列过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59950672/

相关文章:

r - 在哪里可以找到关于 `fun` 中的 `geom_line` 参数的文档?

python - 根据其他列的值创建新列

仅当整个 df r 中不存在时才从变量中删除 0

r - 使用 multidplyr 时如何按多列拆分

r - 简单的嵌套函数和 dplyr tidyeval

r:通过 dplyr 的 group_by 函数传递列列表

r - 来自load.wave的不完整的wav文件,由save.wave保存

r - 追加多个大数据表;使用 colClasses 和 fread 进行自定义数据强制转换;命名管道

r - 使用从 Stata 到 R data.frame 的值,但显示标签而不是值

python - 使用 pandas 删除停用词