在R中创建新的条件字符串变量,该变量是现有字符串变量的粘贴()
我对R有个问题,这让我发疯 我根据报告的数据(清理和验证)设置了许多条件变量,并一直在运行这些变量。它与替换向量的长度以及条件语句有关(请原谅我拙劣的解释…) 让我来举一个例子: 根据报告的数据,我创建了一个“合成”字符变量在R中创建新的条件字符串变量,该变量是现有字符串变量的粘贴(),r,conditional-statements,R,Conditional Statements,我对R有个问题,这让我发疯 我根据报告的数据(清理和验证)设置了许多条件变量,并一直在运行这些变量。它与替换向量的长度以及条件语句有关(请原谅我拙劣的解释…) 让我来举一个例子: 根据报告的数据,我创建了一个“合成”字符变量batch_id,如下粘贴(var1,var2,sep=“”)。但是,仅当var2长度为6个字符并以“B”结尾时 如果var2较短(通常是这样)或不以“B”结尾,我希望batch\u iddata$batch\u iddata$batch\u id您可以: library(s
batch_id
,如下粘贴(var1,var2,sep=“”)
。但是,仅当var2
长度为6个字符并以“B”结尾时
如果var2较短(通常是这样)或不以“B”结尾,我希望batch\u iddata$batch\u iddata$batch\u id您可以:
library(stringr)
# generate some dummy data
df <- data.frame(var1=c("a", "b", "c"), var2=c("12345B", "123B", "123456"),stringsAsFactors=F)
df$batch_id <- with(df, ifelse(nchar(var2) == 6 & str_sub(var2, -1) == "B", str_c(var1, var2), NA))
库(stringr)
#生成一些虚拟数据
df你可以做:
library(stringr)
# generate some dummy data
df <- data.frame(var1=c("a", "b", "c"), var2=c("12345B", "123B", "123456"),stringsAsFactors=F)
df$batch_id <- with(df, ifelse(nchar(var2) == 6 & str_sub(var2, -1) == "B", str_c(var1, var2), NA))
库(stringr)
#生成一些虚拟数据
df我建议:
batch_id = ifelse(grepl("B$",data$var2) & nchar(data$var2)==6,
paste(data$var1, data$var2, sep=""), NA)
在一行中完成所有工作,避免了添加额外库和学习如何使用它们的复杂性。。。什么叫不爱 我建议:
batch_id = ifelse(grepl("B$",data$var2) & nchar(data$var2)==6,
paste(data$var1, data$var2, sep=""), NA)
在一行中完成所有工作,避免了添加额外库和学习如何使用它们的复杂性。。。什么叫不爱 这个问题将从一个可重复的例子中受益。data$var1我建议您将其与期望的结果一起纳入问题中。假设期望的结果是c(NA,NA,“435312345B”)
(希望如此),我的答案中的一行代码起作用了…这个问题将受益于一个可重复的示例。data$var1我建议您将其与期望的结果一起纳入问题中。假设期望的结果是c(NA,NA,“435312345B”)
(希望如此),我答案中的一行代码起作用了…哇![坐在桌子上]谈谈逆向思维。这就避免了整个问题。谢谢哇![坐在桌子上]谈谈逆向思维。这就避免了整个问题。谢谢优雅的我试试看。还没有尝试过stringr
,也许是时候了?grep
,?grepl
和?gsub
是一条路,如果你以前没有遇到过他们…如果你想选择grepl
,那么使用(df,ifelse(grepl(“???B$”,var2)),paste0(var1,var2))
会更短,但不幸的是,这不再正确grepl(“^.{5}B$”,var2)
起作用,但向已经熟悉nchar
的OP解释起来要复杂得多。代码的简单性是一个比减少字符数更好的目标。优雅。我试试看。还没有尝试过stringr
,也许是时候了?grep
,?grepl
和?gsub
是一条路,如果你以前没有遇到过他们…如果你想选择grepl
,那么使用(df,ifelse(grepl(“???B$”,var2)),paste0(var1,var2))
会更短,但不幸的是,这不再正确grepl(“^.{5}B$”,var2)
起作用,但向已经熟悉nchar
的OP解释起来要复杂得多。代码的简单性是一个比减少字符数更好的目标。