Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.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
嵌套的ifelse R函数传递给sapply()以创建新的data.frame_R_Dataframe - Fatal编程技术网

嵌套的ifelse R函数传递给sapply()以创建新的data.frame

嵌套的ifelse R函数传递给sapply()以创建新的data.frame,r,dataframe,R,Dataframe,假设我们创建一个data.frame,如下所示: > hugs_per_day <- rnorm(10) > hugs_per_day <- as.data.frame(hugs_per_day) > hugs_per_day hugs_per_day 1 -2.500457495 2 -0.204545274 3 -0.955424927 4 0.320184701 5 1.822908001 6 -0.058679520 7 -0.276

假设我们创建一个data.frame,如下所示:

> hugs_per_day <- rnorm(10)
> hugs_per_day <- as.data.frame(hugs_per_day)
> hugs_per_day
   hugs_per_day
1  -2.500457495
2  -0.204545274
3  -0.955424927
4   0.320184701
5   1.822908001
6  -0.058679520
7  -0.276004919
8   0.175341993
9  -0.137404974
10  0.005096691
nested_ifelse <- function(x){

ifelse (x > 1,     mood <- "happy",
    ifelse(x < 0,  mood <- "sad", 
                   mood <- "same as yesterday" ))

   return(mood)
}
nested_ifelse <- function(x){
  mood <- ifelse (x > 1,   "happy",
    ifelse(x < 0, "sad", 
    "same as yesterday" ))
  return(mood)
}
d$mood2 <- sapply(d$v, nested_ifelse)
>每天拥抱每天拥抱每天拥抱
每天拥抱你
1  -2.500457495
2  -0.204545274
3  -0.955424927
4   0.320184701
5   1.822908001
6  -0.058679520
7  -0.276004919
8   0.175341993
9  -0.137404974
10  0.005096691
我们希望每天运行一个函数,根据结果返回一个值,如下所示:

> hugs_per_day <- rnorm(10)
> hugs_per_day <- as.data.frame(hugs_per_day)
> hugs_per_day
   hugs_per_day
1  -2.500457495
2  -0.204545274
3  -0.955424927
4   0.320184701
5   1.822908001
6  -0.058679520
7  -0.276004919
8   0.175341993
9  -0.137404974
10  0.005096691
nested_ifelse <- function(x){

ifelse (x > 1,     mood <- "happy",
    ifelse(x < 0,  mood <- "sad", 
                   mood <- "same as yesterday" ))

   return(mood)
}
nested_ifelse <- function(x){
  mood <- ifelse (x > 1,   "happy",
    ifelse(x < 0, "sad", 
    "same as yesterday" ))
  return(mood)
}
d$mood2 <- sapply(d$v, nested_ifelse)

nested_if else 1,mood您没有使用set.seed,因此示例不可复制,但这将为您提供所需的向量:

    hugs_per_day$mood <- c("sad","same as yesterday","happy" )[
              findInterval(  hugs_per_day$hugs_per_day, c(-Inf, 0, 1) ) ]
    hugs_per_day
       hugs_per_day              mood
    1     0.5747557 same as yesterday
    2    -1.0236557               sad
    3    -0.0151383               sad
    4    -0.9359486               sad
    5     1.1022975             happy
    6    -0.4755931               sad
    7    -0.7094400               sad
    8    -0.5012581               sad
    9    -1.6290935               sad
    10   -1.1676193               sad

hugs\u per\u day$mood我不确定这是否能解决您的实际问题,但我想指出,您并不总是需要嵌套
ifelse
函数。有时您可以按顺序使用它们,只需确保顺序正确,这样就不会过度写入以前的值

set.seed(229)
hugs_per_day <- data.frame(hugs=rnorm(10))

hugs_per_day$mood <- "same as yesterday"
hugs_per_day$mood <- with(hugs_per_day, ifelse(hugs > 1, "happy", mood))
hugs_per_day$mood <- with(hugs_per_day, ifelse(hugs < 0, "sad", mood))
set.seed(229)

每天拥抱嵌套的ifelse应该是这样的:

> hugs_per_day <- rnorm(10)
> hugs_per_day <- as.data.frame(hugs_per_day)
> hugs_per_day
   hugs_per_day
1  -2.500457495
2  -0.204545274
3  -0.955424927
4   0.320184701
5   1.822908001
6  -0.058679520
7  -0.276004919
8   0.175341993
9  -0.137404974
10  0.005096691
nested_ifelse <- function(x){

ifelse (x > 1,     mood <- "happy",
    ifelse(x < 0,  mood <- "sad", 
                   mood <- "same as yesterday" ))

   return(mood)
}
nested_ifelse <- function(x){
  mood <- ifelse (x > 1,   "happy",
    ifelse(x < 0, "sad", 
    "same as yesterday" ))
  return(mood)
}
d$mood2 <- sapply(d$v, nested_ifelse)

nested_ifelse()您可以使用示例nested_ifelse()函数代替findInterval()?我想,这是把一个问题概括得太多的危险。findInterval()似乎找到了一个解决方案,但如果引入另一个向量进行比较呢?例如,它是否适用于x[,1]>x[,2],而不是x>1?有时可能需要一个特殊的函数,在这种情况下,您将如何将该函数传递给sapply()?是的,您可以使用嵌套的
ifelse
,但它们在嵌套中的深度限制为7。与使用
ifelse
子句添加嵌套级别相比,向选择向量添加元素的代码要少得多。你只需把一个新的项目添加到第一个向量中,一个新的项目就添加到每个新的级别的FiffStector矢量中。谢谢你给我一个新的方法来考虑。注意,你确实需要1个+ε来等价,因为原来的定义<代码> NestistdIfEnter/代码>的x==1是“代码”,“与昨天一样”<代码>,而不是<代码>“快乐”。
…对于我的方法(可能不太理想),这是完美的。谢谢,谢谢乔希。知道如何以多种方式处理问题是件好事。