R问题-如何在多列中选择包含某些字符串的多行?

Posted

技术标签:

【中文标题】R问题-如何在多列中选择包含某些字符串的多行?【英文标题】:R questions - how to select multiple rows containing certain strings in multiple columns? 【发布时间】:2021-12-22 23:43:43 【问题描述】:

使用 R,我正在分析纵向数据集。下表作为示例。我愿意

    在多列(dg1、dg2、dg3、dg4)中选择包含特定字符串(例如 A1、A13、B1、B2)的多行,同时保留其他列(例如年龄组)。 将具有选定行的受试者分配到 A 组,将具有未选定行的受试者分配到 B 组。

什么是最好的解决方案?提前谢谢!

id  dg1 dg2 dg3 dg4 agegroup
1   A1  F1  D1  B3  1
1   B3  A13 C1  B5  2
2   B5  D1  B1  B6  1
2   C1  C1  B4  B2  2
2   D1  C1  B5  A1  3
3   D1  B4  D1  C2  1
4   E1  B1  G1  C3  2
4   E2  B7  F1  S13 3
5   F1  B3  D1  B2  1

【问题讨论】:

【参考方案1】:

如果我理解正确,您想检查任何列 dg1 到 dg4 是否包含所需的模式,如果是,则该行的类为“A”,否则为“B”。

> pat=c("A1","A13","B1","B2")
> ifelse(rowSums(mapply(`==`,df[grep("dg",colnames(df))],pat))>0,"A","B")
[1] "A" "A" "A" "A" "B" "B" "B" "B" "A"

【讨论】:

感谢您的建议!我可能做错了什么,但是当我运行您的 R 脚本时,我收到一条错误消息,指出“缺少参数“no”,没有默认值。”相反,我尝试了以下 R 脚本并且它们有效,但我不确定这是否是最佳解决方案,我仍在尝试找出第二个问题。谢谢! d.sub % filter_at(vars(dg1, dg2, dg3, dg4), any_vars(.%in% c("A1" ,"A13", "B1", "B2")))跨度> @Grace 此代码适用于您提供的数据。如果您在数据上运行它并且它不起作用,那么您的数据一定是不同的。您应该调整代码以匹配您的新数据。

以上是关于R问题-如何在多列中选择包含某些字符串的多行?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用多个子查询的情况下使用多列选择多行

如何将多行和多列绑定到列表视图?

在pandas中提取包含多行和多列的JSON字符串列的部分

如何在sqlalchemy中选择多列连接的特定列?

在 R 中,如何真正快速地遍历数据帧的行?

如何跨多列和多行“汇总”数据