如何在R中的ifelse语句中使用seq()函数
在ifelse语句中使用seq()函数时,我遇到了一个问题。我有一个dataframe,它包含以下列如何在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
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)您的第一个数据示例有两个不同的模型,但您的预期输出只有一个。我不知道该相信哪一个。