R 如何创建一个新变量,该变量包含基于其他选定变量的三个计算';价值观

R 如何创建一个新变量,该变量包含基于其他选定变量的三个计算';价值观,r,dataframe,R,Dataframe,我想创建一个新变量,它包含三个基于选定列的值的计算。 以下是我的数据帧示例: dat <- read.table(text = " cats birds wolfs snakes 0 3 9 7 1 3 8 7 1 1 2 3 0 1 2 3 0

我想创建一个新变量,它包含三个基于选定列的值的计算。 以下是我的数据帧示例:

 dat <- read.table(text = " cats birds    wolfs     snakes
     0        3        9         7
     1        3        8         7
     1        1        2         3
     0        1        2         3
     0        1        2         3
     1        6        1         1
     0        6        1         1
     1        6        1         1   ",header = TRUE) 
欢迎任何想法

尝试以下方法:

dat$full_calc <- with(dat, ifelse(wolfs == 1, 1, 
                             ifelse(wolfs == 2, 20,
                                      ifelse(wolfs >= 8 & snakes == 7, 88, 999))))
dat$full_calc=8&snakes=7,88999)))
您可以将多个
ifelse
嵌套在彼此内部。

尝试以下方法:

dat$full_calc <- with(dat, ifelse(wolfs == 1, 1, 
                             ifelse(wolfs == 2, 20,
                                      ifelse(wolfs >= 8 & snakes == 7, 88, 999))))
dat$full_calc=8&snakes=7,88999)))

您可以将多个
ifelse
嵌套在彼此内部。

如果您愿意使用
data.table
包,则更新表的功能非常透明且易于理解

#Bring in data.table
require(data.table)
setDT(dat)

#Develop full_calc
dat[ , full_calc := 999]
dat[wolfs==1 , full_calc := 1]
dat[wolfs==2 , full_calc := 20]
dat[wolfs>=8 & snakes==7 , full_calc := 88]

如果您愿意使用
data.table
包,那么更新表的功能是非常透明和可理解的

#Bring in data.table
require(data.table)
setDT(dat)

#Develop full_calc
dat[ , full_calc := 999]
dat[wolfs==1 , full_calc := 1]
dat[wolfs==2 , full_calc := 20]
dat[wolfs>=8 & snakes==7 , full_calc := 88]
您也可以尝试:

  indx <- with(dat, cbind(wolfs==1, wolfs==2, wolfs>=8 & snakes==7))
  dat$full_calc <- c(cbind(indx, !rowSums(indx))%*%c(1,20,88,999))
  dat$full_calc   #please check the first value in your expected output 
  #[1] 88 88 20 20 20  1  1  1 
indx=8&snakes=7))
dat$full_calc您也可以尝试:

  indx <- with(dat, cbind(wolfs==1, wolfs==2, wolfs>=8 & snakes==7))
  dat$full_calc <- c(cbind(indx, !rowSums(indx))%*%c(1,20,88,999))
  dat$full_calc   #please check the first value in your expected output 
  #[1] 88 88 20 20 20  1  1  1 
indx=8&snakes=7))
dat$full_计算