如何在比较R中多个列的值后创建新变量?
我有下面的数据框q17。我的目标是按照以下规则替换“联系人”:如何在比较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
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))))