首页 > 解决方案 > 文本中新列中的标志等于多列之一中的“是”

问题描述

我有一个已经设置了多个标志的大型数据集。现在,如果它在一个或多个列中被标记,我想将它聚合为一个整体标志

例如,我有一个混合列:产品、产品 ID,然后是标志 1、标志 2、标志 3。现在我的新列需要说明标志 1,2 或 3 中是否有 Y。

谢谢你的帮助!

标签: r

解决方案


您可以使用此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 

然后,使用greplto matchY以及将applypaste折叠为字符串,识别那些包含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>

推荐阅读