Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.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中的ifelse语句中使用seq()函数_R - Fatal编程技术网

如何在R中的ifelse语句中使用seq()函数

如何在R中的ifelse语句中使用seq()函数,r,R,在ifelse语句中使用seq()函数时,我遇到了一个问题。我有一个dataframe,它包含以下列 Dataframe(df): newmodel id NewModel_1 30 NewModel_2 30 我需要增加这两行的id值,因为模型的id不应该相同。有一个常量值(99),我们必须根据条件从中增加id值 当我尝试实现下面的代码时 df %>% mutate(id=ifelse(any(grepl(&qu

在ifelse语句中使用seq()函数时,我遇到了一个问题。我有一个dataframe,它包含以下列

Dataframe(df): newmodel    id 
               NewModel_1  30
               NewModel_2  30
我需要增加这两行的id值,因为模型的id不应该相同。有一个常量值(99),我们必须根据条件从中增加id值

当我尝试实现下面的代码时

 df %>% mutate(id=ifelse(any(grepl("NewModel_", df$newmodel)), seq(from =99+1, by =1, length.out=2) , id))
我得到的输出是

newmodel    id
NewModel_1  100
NewModel_1  100
如预期的那个在哪里

newmode1   id
NewModel_1 100
NewModel_1 101
有人能解释一下为什么会这样吗


提前谢谢

您在找这样的东西吗

inds <- grepl('NewModel_', df$newmodel)
df$id[inds] <- seq(100, by = 1, length.out = sum(inds))
df

#    newmodel  id
#1 NewModel_1 100
#2 NewModel_2 101 

inds你在找这样的东西吗

inds <- grepl('NewModel_', df$newmodel)
df$id[inds] <- seq(100, by = 1, length.out = sum(inds))
df

#    newmodel  id
#1 NewModel_1 100
#2 NewModel_2 101 

inds我猜是因为函数只获取了seq的第一项

你可以试试这种方法,它在这里起作用

    if(any(grepl("NewModel_", df$newmodel))) {
df$id <- seq(from = 99 + 1, length.out = (length(df$id)))
}
if(任何(grepl(“NewModel”,df$NewModel))){

df$id我猜是因为函数只获取seq的第一项

你可以试试这种方法,它在这里起作用

    if(any(grepl("NewModel_", df$newmodel))) {
df$id <- seq(from = 99 + 1, length.out = (length(df$id)))
}
if(任何(grepl(“NewModel”,df$NewModel))){

df$id您的
ifelse(.)
失败的原因是
ifelse
根据条件向量的输入长度对其输出长度进行键控;如果它短于
yes=
no=
向量中的任何一个,则会自动忽略额外的长度。在您的情况下,
any(grepl(“NewModel”,df$NewModel))
永远不会超过长度1,因此输出将为长度1

例如:

ifelse(TRUE,1:2,3:4)
# [1] 1
ifelse(c(对,错),1:2,3:4)
# [1] 1 4
###举个例子,R过度放任的回收会“出错”
ifelse(c(真,假,真),1:2,3:4)
# [1] 1 4 1
下面是一个使用
match
为每个模型分配唯一整数的快速方法

基尔
dat$newid%
变异(newid=99+匹配(newmodel,unique(newmodel)))
#newmodel id newid
#1个新型号1 30 100
#2新型号2 30 101

资料


dat您的
ifelse(.)
失败的原因是
ifelse
根据条件向量的输入长度对其输出长度进行键控;如果它短于
yes=
no=
向量中的任何一个,则会自动忽略额外的长度。在您的情况下,
any(grepl(“NewModel”,df$NewModel))
永远不会超过长度1,因此输出将为长度1

例如:

ifelse(TRUE,1:2,3:4)
# [1] 1
ifelse(c(对,错),1:2,3:4)
# [1] 1 4
###举个例子,R过度放任的回收会“出错”
ifelse(c(真,假,真),1:2,3:4)
# [1] 1 4 1
下面是一个使用
match
为每个模型分配唯一整数的快速方法

基尔
dat$newid%
变异(newid=99+匹配(newmodel,unique(newmodel)))
#newmodel id newid
#1个新型号1 30 100
#2新型号2 30 101

资料


dat你有没有试着把变异函数的序列作为一个向量,然后把它拉到
mutate
,你最好通过
dput()
(1)永远不要在
mutate
内部使用
df$
,它会破坏大多数“善”
dplyr
动词函数提供的您的第一个数据样本有两个不同的模型,但您的预期输出只有一个。我不知道该相信哪一个。您是否尝试将mutate函数的序列创建为向量,然后将其拉入
mutate
,您最好通过
dput()
(1)附加一小段
df
千万不要在
mutate
内部使用
df$
,它会破坏
dplyr
动词函数提供的大多数“优点”。(2)您的第一个数据示例有两个不同的模型,但您的预期输出只有一个。我不知道该相信哪一个。