R 使用ifelse和在内部指定列
为什么ifelse和In的功能不能一起工作?作为说明该问题的示例,我有以下代码。我想要的是创建两个列(Petal.Dim1和Petal.Dim2,它们只是Petal.Width和Petal.Length),但在sepa.Length大于5时切换R 使用ifelse和在内部指定列,r,if-statement,R,If Statement,为什么ifelse和In的功能不能一起工作?作为说明该问题的示例,我有以下代码。我想要的是创建两个列(Petal.Dim1和Petal.Dim2,它们只是Petal.Width和Petal.Length),但在sepa.Length大于5时切换 data(iris) within(iris, ifelse(Sepal.Length>5,{ Petal.Dim1 <-Petal.Width Petal.Dim2 <-
data(iris)
within(iris, ifelse(Sepal.Length>5,{
Petal.Dim1 <-Petal.Width
Petal.Dim2 <-Petal.Length
}, {
Petal.Dim1<-Petal.Length
Petal.Dim2<-Petal.Width}))
数据(iris)
内(鸢尾,萼片长度>5{
Petal.Dim1我不能说您的代码有什么问题,但我可以建议使用转换
:
data(iris)
dat <- transform(iris,
Petal.Dim1=ifelse(Sepal.Length>5, Petal.Width, Petal.Length),
Petal.Dim2=ifelse(Sepal.Length>5, Petal.Length, Petal.Width)
)
str(dat)
idx <- iris[,"Sepal.Length"] > 5
dat <- iris
dat[idx, "Dim1"] <- Petal.Width
dat[idx, "Dim2"] <- Petal.Length
dat[!idx, "Dim1"] <- Petal.Length
dat[!idx, "Dim2"] <- Petal.Width
可能更快,但我不确定。您必须小心使用非标准求值。
中的只是eval
的包装,因此这两个块都会被执行,因为它不知道ifelse
的行为。您想要的是:
dat <- within(iris, {
Petal.Dim1 <- ifelse(Sepal.Length > 5, Petal.Width, Petal.Length)
Petal.Dim2 <- ifelse(Sepal.Length > 5, Petal.Length, Petal.Width)
})
dat您误读了帮助文件(?iflese
)。ifelse
返回一个与测试形状相同的值。也就是说,它不执行操作,而是返回值。很酷,这是可行的,但我如何将Petal.Dim1和Petal.Dim2放在1 ifelse中?我必须在更大的数据集中使用多个列来缩放它。