如何解决根据条件突变新变量
我正在尝试对列表中的新变量进行突变。我得到了两个名为rci_det_post的变量,其编码为1/0,还有一个名为rci_imp_post的变量,其编码也为1/0。我想突变一个新变量,当rci_det_post为1时包含-1,而当rci_imp_post为1时包含1。如果两者均为0,则应包含0。
这是我想要的示例:
rci_det_post rci_imp_post rci.1
1 1 0 -1
2 0 0 0
3 0 1 1
4 0 0 0
所以我尝试了这个:
implist %>%
map(function(x) mutate(x,rci.1 = ifelse(x$rci_det_post == 1 & x$rci_imp_post == 0,-1,ifelse(x$rci_det_post == 0 & x$rci_imp_pst == 1,1,ifelse(x$rci_det_post == 0 & rci_imp_post == 0,0)))))
但是不幸的是,它不起作用,因为我得到了这个回报:
rci_det_post rci_imp_post rci.1
1 1 0 -1
2 0 0 NA
3 0 1 NA
4 0 0 NA
有人可以帮我吗? 谢谢!
解决方法
我认为您想得太多了。如果只有二进制值,则可以使用pmax
来获取每一行的最大值。这将是1或0(如果均为0)。然后您可以应用条件将rci_det_post
为1的所有值更改为-1,即
replace(do.call(pmax,d1),d1$rci_det_post == 1,-1)
#[1] -1 0 1 0
其中
dput(d1)
structure(list(rci_det_post = c(1L,0L,0L),rci_imp_post = c(0L,1L,0L)),row.names = c("1","2","3","4"),class = "data.frame")
,
除了索托斯的答案
#using ifelse
implist$rci.1 <- ifelse(implist$rci_det_post ==1,-1,ifelse(implist$rci_imp_post == 1,1,ifelse(implist$rci_det_post == 0 & implist$rci_imp_post == 0,implist$rci.1)))
#using data.table
library(data.table)
setDT(implist)
implist[rci_det_post == 1,rci.1 := -1]
implist[rci_imp_post == 1,rci.1 := 1]
implist[rci_det_post ==0 & rci_imp_post == 0,rci.1 := 0]
请注意,在ifelse函数的最后一行中,您仅定义了两个变量都等于0时的值
ifelse(x$rci_det_post == 0 & rci_imp_post == 0,0)
,
df %>%
mutate(rci.1 = case_when(
rci_det_post == 1 ~ -1,rci_imp_post == 1 ~ 1,TRUE ~ 0
)
)
两个变量是否可能同时为1?如果是这样,它将给出这样的行值-1。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。