r - 文本中新列中的标志等于多列之一中的“是”
问题描述
我有一个已经设置了多个标志的大型数据集。现在,如果它在一个或多个列中被标记,我想将它聚合为一个整体标志
例如,我有一个混合列:产品、产品 ID,然后是标志 1、标志 2、标志 3。现在我的新列需要说明标志 1,2 或 3 中是否有 Y。
谢谢你的帮助!
解决方案
您可以使用此base R
解决方案:
可重现的数据:
set.seed(123)
df <- data.frame(
col1 = sample(c("something", "nothing", "Y", "anotherthing"), 20, replace = T),
col2 = sample(c("nothing", "Y", "anotherthing"), 20, replace = T),
col3 = sample(c("something", "nothing", "Y", "anotherthing", "yetanotherthing"), 20, replace = T))
首先创建一个新列来放置Flag
值:
df$Flag <- NA
然后,使用grepl
to matchY
以及将apply
行paste
折叠为字符串,识别那些包含Y
并更新NA
的行Flag
:
df$Flag[which(grepl("Y", apply(df, 1, paste0, collapse = " ")))] <- "Flag"
结果:
df
col1 col2 col3 Flag
1 nothing anotherthing something <NA>
2 anotherthing anotherthing Y Flag
3 nothing Y Y Flag
4 anotherthing anotherthing nothing <NA>
5 anotherthing Y something Flag
6 something anotherthing something <NA>
7 Y Y nothing Flag
8 anotherthing Y Y Flag
9 Y nothing nothing Flag
10 nothing nothing yetanotherthing <NA>
11 anotherthing anotherthing something <NA>
12 nothing anotherthing Y Flag
13 Y anotherthing anotherthing Flag
14 Y anotherthing something Flag
15 something nothing Y Flag
16 anotherthing Y nothing Flag
17 something anotherthing something <NA>
18 something nothing anotherthing <NA>
19 nothing nothing yetanotherthing <NA>
20 anotherthing nothing nothing <NA>
推荐阅读
- python - 仅包括我在列表中指定的 DataFrame 中的列?
- javascript - ajax added_to_cart 打开侧购物车
- codeql - 如何使用 CodeQL 获得对“foo”的引用?
- flutter - 如何在简单的 auth flutter 包中更改 ui?
- python-3.x - 如何在python中为以下场景编写unittest
- swiftui - SwiftUI 集合绑定:从详细列表中删除崩溃并显示“索引超出范围”
- apache - ProxyRemote 导致“AH00898:与远程服务器进行 SSL 握手期间出错 ...”,适用于其他服务器
- three.js - .position 属性真的是在three.js 中将值存储在本地空间或世界空间中吗?
- php - Symfony Doctrine Autoload 从关系多对一/一对多
- python - 从Python中的numpy数组中删除类型为“object”的重复元素