Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.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代码:如何根据其他变量的多个条件生成变量_R - Fatal编程技术网

R代码:如何根据其他变量的多个条件生成变量

R代码:如何根据其他变量的多个条件生成变量,r,R,我有一个初学者R用户: 这是我的数据集 factor1 <- c(1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8,8,9, 9, 10, 10) factor2 <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,16,17, 18, 19, 20) factor3 <- c("a", "a", "a", "a", "a", "b", "b", "b", "b", "b", "c"

我有一个初学者R用户:

这是我的数据集

factor1 <- c(1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8,8,9, 9, 10, 10)
factor2 <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,16,17, 18, 19, 20)
factor3 <- c("a", "a", "a", "a", "a", "b", "b", "b", "b", "b", "c", "c", "c", "c", "c", "d", "d", "d", "d", "d")
factor4 <- c(10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150,160,170, 180, 190, NA)
dataset <- data.frame(factor1, factor2, factor3, factor4) 

factor1使用
dplyr

library(dplyr)

dataset %>%
  mutate(newvar = ifelse(factor1 > 5 & 
                         factor2 < 19 & 
                         (factor3=="b" | factor3=="c") & 
                         !is.na(factor4), 1, NA))
库(dplyr)
数据集%>%
变异(newvar=ifelse(因子1>5&
系数2<19&
(系数3==“b”|系数3==“c”)&
!is.na(因子4,1,na))
在base R中,您只需执行以下操作(将我的评论升级为答案):


dataset$newvar=5&dataset$factor2<19&(dataset$factor3==“b”| dataset$factor3==“c”),“newvar”]基于多个值的多个条件生成一个新变量

这一点问题没有得到明确解决:

理想情况下,我希望指定不同的条件,因此一些观察值将是变量newvar中的值1、2、3和4,取决于其他几个变量的值

一个简单的解决方案是在
时使用
case\u。与Stata的
recode
类似,它允许您同时指定多个值

其工作方式如下:

newvar = case_when(
condition1 ~ target value,
condition2 ~ target value)
e、 g.
var1==1~0

重要信息:每行后面都需要一个

library(dplyr)

dataset <- mutate(dataset,
        newvar = case_when(
               factor1 >= 5 & factor2<19 & (factor3 =="b" | factor3 =="c")  ~ 1, 
               factor1 == 1 ~ 2,
               factor1 == 2 ~ 3,
               TRUE ~ NA_real_ # This is for all other values 
             ))                # not covered by the above.

dataset


#       factor1 factor2 factor3 factor4 newvar
# 1        1       1       a      10      2
# 2        1       2       a      20      2
# 3        2       3       a      30      3
# 4        2       4       a      40      3
# 5        3       5       a      50     NA
# 6        3       6       b      60     NA
# 7        4       7       b      70     NA
# 8        4       8       b      80     NA
# 9        5       9       b      90      1
# 10       5      10       b     100      1
# 11       6      11       c     110      1
# 12       6      12       c     120      1
# 13       7      13       c     130      1
# 14       7      14       c     140      1
# 15       8      15       c     150      1
# 16       8      16       d     160     NA
# 17       9      17       d     170     NA
# 18       9      18       d     180     NA
# 19      10      19       d     190     NA
# 20      10      20       d      NA     NA
库(dplyr)

dataset=5&factor2或:
dataset$newvar=5&dataset$factor2<19&(dataset$factor3==“b”| dataset$factor3==“c”),“newvar”]这很有效。谢谢你回答了精心设计的第一个问题,包括一个可重复的示例!很抱歉,我收到此错误:找不到函数“%>%”。您发送的代码看起来很整洁,但不起作用。请你解释一下,我安装了dplyr并设法运行了你的代码,但是出于某种原因,newvar并没有改变我正在处理的数据集中的值。你能告诉我怎么做吗?thanks@Andr如果我提供的函数返回一个新的数据集,它不会重写旧的数据集。将第一行更改为
dataset%
,它应该能满足您的期望。
dataset$newvar <- NA
indx <- dataset$factor1 >= 5 & dataset$factor2 < 19 & (dataset$factor3=="b" | dataset$factor3 =="c") & !is.na(dataset$factor4)
dataset[indx, "newvar"] <- 1
newvar = case_when(
condition1 ~ target value,
condition2 ~ target value)
library(dplyr)

dataset <- mutate(dataset,
        newvar = case_when(
               factor1 >= 5 & factor2<19 & (factor3 =="b" | factor3 =="c")  ~ 1, 
               factor1 == 1 ~ 2,
               factor1 == 2 ~ 3,
               TRUE ~ NA_real_ # This is for all other values 
             ))                # not covered by the above.

dataset


#       factor1 factor2 factor3 factor4 newvar
# 1        1       1       a      10      2
# 2        1       2       a      20      2
# 3        2       3       a      30      3
# 4        2       4       a      40      3
# 5        3       5       a      50     NA
# 6        3       6       b      60     NA
# 7        4       7       b      70     NA
# 8        4       8       b      80     NA
# 9        5       9       b      90      1
# 10       5      10       b     100      1
# 11       6      11       c     110      1
# 12       6      12       c     120      1
# 13       7      13       c     130      1
# 14       7      14       c     140      1
# 15       8      15       c     150      1
# 16       8      16       d     160     NA
# 17       9      17       d     170     NA
# 18       9      18       d     180     NA
# 19      10      19       d     190     NA
# 20      10      20       d      NA     NA