Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中创建新的条件字符串变量,该变量是现有字符串变量的粘贴()_R_Conditional Statements - Fatal编程技术网

在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

我对R有个问题,这让我发疯

我根据报告的数据(清理和验证)设置了许多条件变量,并一直在运行这些变量。它与替换向量的长度以及条件语句有关(请原谅我拙劣的解释…)

让我来举一个例子:

根据报告的数据,我创建了一个“合成”字符变量
batch_id
,如下
粘贴(var1,var2,sep=“”)
。但是,仅当
var2
长度为6个字符并以“B”结尾时

如果var2较短(通常是这样)或不以“B”结尾,我希望
batch\u id
data$batch\u id
data$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解释起来要复杂得多。代码的简单性是一个比减少字符数更好的目标。