Grepl首字母,两种模式匹配
Grepl first letters, two patterns to match
我有以下数据框。如果数据框中有以 A1 或 B1 或两者开头的字符串,我想创建一个名为 A1B1 的列,如果没有,则为零。
我做错了什么:
set.seed(1)
Data <- data.frame(id = seq(1, 10),
Diag1 = sample(c("A123", "B123", "C123"), 10, replace = TRUE),
Diag2 = sample(c("D123", "E123", "F123"), 10, replace = TRUE),
Diag3 = sample(c("G123", "H123", "I123"), 10, replace = TRUE),
Diag4 = sample(c("A123", "B123", "C123"), 10, replace = TRUE),
Diag5 = sample(c("J123", "K123", "L123"), 10, replace = TRUE),
Diag6 = sample(c("M123", "N123", "O123"), 10, replace = TRUE),
Diag7 = sample(c("P123", "Q123", "R123"), 10, replace = TRUE))
A1orB1 <- c("^A1", "^B1")
Data$A1B1 <- apply(Data[-1],1,function(x)as.integer(sum(grepl(paste(A1orB1,collapse="|"), x))==1))
我希望有 ID 为 (1,2,3,4,5,8,9,10) 的,但我只有 4,5 和 9。
谢谢!
目前您正在计算 A1...
或 B1...
个字符串的 总和 并将其与 1 进行比较。
也许将 sum()
替换为 any()
(并考虑将您的代码分成几个中间块以使其更具可读性......)。或者您可以在代码中将 ==1
替换为 >=1
。
ss <- paste(A1orB1,collapse="|")
ff <- function(x) as.integer(any(grepl(ss,x)))
Data$A1B1 <- apply(Data[-1],1,ff)
我有以下数据框。如果数据框中有以 A1 或 B1 或两者开头的字符串,我想创建一个名为 A1B1 的列,如果没有,则为零。
我做错了什么:
set.seed(1)
Data <- data.frame(id = seq(1, 10),
Diag1 = sample(c("A123", "B123", "C123"), 10, replace = TRUE),
Diag2 = sample(c("D123", "E123", "F123"), 10, replace = TRUE),
Diag3 = sample(c("G123", "H123", "I123"), 10, replace = TRUE),
Diag4 = sample(c("A123", "B123", "C123"), 10, replace = TRUE),
Diag5 = sample(c("J123", "K123", "L123"), 10, replace = TRUE),
Diag6 = sample(c("M123", "N123", "O123"), 10, replace = TRUE),
Diag7 = sample(c("P123", "Q123", "R123"), 10, replace = TRUE))
A1orB1 <- c("^A1", "^B1")
Data$A1B1 <- apply(Data[-1],1,function(x)as.integer(sum(grepl(paste(A1orB1,collapse="|"), x))==1))
我希望有 ID 为 (1,2,3,4,5,8,9,10) 的,但我只有 4,5 和 9。
谢谢!
目前您正在计算 A1...
或 B1...
个字符串的 总和 并将其与 1 进行比较。
也许将 sum()
替换为 any()
(并考虑将您的代码分成几个中间块以使其更具可读性......)。或者您可以在代码中将 ==1
替换为 >=1
。
ss <- paste(A1orB1,collapse="|")
ff <- function(x) as.integer(any(grepl(ss,x)))
Data$A1B1 <- apply(Data[-1],1,ff)