Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.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_If Statement_Data Manipulation - Fatal编程技术网

如何在比较R中多个列的值后创建新变量?

如何在比较R中多个列的值后创建新变量?,r,if-statement,data-manipulation,R,If Statement,Data Manipulation,我有下面的数据框q17。我的目标是按照以下规则替换“联系人”: ifelse (any values in q17a, q17d, q17f, q17g <5) then contacts is 1 ifelse (any values in q17a, q17d, q17f, q17g ==5) then contacts is 0 ifelse (any values in q17a, q17d, q17f, q17g ==8 or 9 or NA) the

我有下面的数据框q17。我的目标是按照以下规则替换“联系人”:

ifelse (any values in q17a, q17d, q17f, q17g <5) then contacts is 1

    ifelse (any values in q17a, q17d, q17f, q17g ==5) then contacts is 0

        ifelse (any values in q17a, q17d, q17f, q17g ==8 or 9 or NA) then contacts is 99
例如,我使用提供的答案尝试了以下方法,但结果并不像我预期的那样。有人能建议如何解决这个问题吗

apply(q17[,colnames(q17)[1:4]], 1, function(df) 
  ifelse(any(df<5), 1, 
      ifelse(any(df==5),0, 
            ifelse(df == 8 & df == 9 & is.na(df)), 99))) 
[1]  1 NA  1  1  1  1
apply(q17[,colnames(q17)[1:4]],1,函数(df)

ifelse(any)(df我被你的问题弄糊涂了……完全按照你的要求,这是你如何做你所要求的,按照你的例子的顺序,而不是你的问题

q17 <- data.frame(q17a = c(1,2,3,4,5,6,7,8,9,10), q17d = c(2,5,1,4,1,3,4,5,4,4), q17f = c(2,5,5,5,5,NA,5,1,NA,4), q17g = c(2,5,5,5,5,NA,5,1,NA,4))
这是我的方法:

apply(q17[,colnames(q17)[1:4]], 1, function(df) 
  ifelse(any(df == 8 | df == 9 | is.na(df)), 99, 
         ifelse(any(df == 5), 0, 
                ifelse(any(df < 5), 1))))
问题编辑后:

apply(q17[,colnames(q17)[1:4]], 1, function(df) 
  ifelse(any(df < 5, na.rm = T), 1, 
         ifelse(any(df == 5, na.rm = T), 0, 
                ifelse(df == 8 & df == 9 & is.na(df), 99))))
apply(q17[,colnames(q17)[1:4]],1,函数(df)
如果有(df<5,na.rm=T),1,
如果有(df==5,na.rm=T),则为0,
ifelse(df==8&df==9&is.na(df,99)))

您的问题不清楚。data.frame中的大多数值为5或低于5(前两个条件)。显示的数据中没有NA、8或9。在代码中,您只使用了一列(变量)d1$q17d,其他变量呢?谢谢aelwan,我采纳了你的建议,改进了我的问题。我将NA改为“x”原来我把它们混在了问题中,现在我已经解决了。非常感谢!它很有效!我不清楚的是如何循环。很抱歉我原来的问题中出现了混乱。我现在已经更新了。当然,“应用”系列值得查找,但你可能只想在谷歌上搜索一些“for loop”在R.Hi Evan的例子中,我有一个问题:当数据是这样的:q17a q17d q17f q17g 1 2 5 2 NA 2 5 5 5 NA 3 1 5 NA 4 NA 5 NA 5 1 5 5 6 3 5 NA NAUse dput(q17)然后粘贴输出,以便我可以运行您的数据~我已经编辑了问题。现在它包括数据和输出
apply(q17[,colnames(q17)[1:4]], 1, function(df) 
  ifelse(any(df == 8 | df == 9 | is.na(df)), 99, 
         ifelse(any(df == 5), 0, 
                ifelse(any(df < 5), 1))))
 [1]  1  0  0  0  0 99  0 99 99  1
apply(q17[,colnames(q17)[1:4]], 1, function(df) 
  ifelse(any(df < 5, na.rm = T), 1, 
         ifelse(any(df == 5, na.rm = T), 0, 
                ifelse(df == 8 & df == 9 & is.na(df), 99))))