R表示组是否有值
除了“NEWVAR”之外,我还有所有列的“data”,我希望这样创建它: 如果某个特定“组”的分数为%SCORE中的1%,则“NEWVAR”的值为“1” 如果%SCORE和score1中的score2%不在特定“组”的分数中,则使用dplyr将值“2”赋予“NEWVAR”: 输入%select NEWVAR 输入%>% 组\按组%>% mutateNEWVAR=当分数%1~1中的任何分数%, %score2中的anySCORE%&!分数%1~2中的分数% 使用dplyr: 输入%select NEWVAR 输入%>% 组\按组%>% mutateNEWVAR=当分数%1~1中的任何分数%, %score2中的anySCORE%&!分数%1~2中的分数%R表示组是否有值,r,data.table,pipe,R,Data.table,Pipe,除了“NEWVAR”之外,我还有所有列的“data”,我希望这样创建它: 如果某个特定“组”的分数为%SCORE中的1%,则“NEWVAR”的值为“1” 如果%SCORE和score1中的score2%不在特定“组”的分数中,则使用dplyr将值“2”赋予“NEWVAR”: 输入%select NEWVAR 输入%>% 组\按组%>% mutateNEWVAR=当分数%1~1中的任何分数%, %score2中的anySCORE%&!分数%1~2中的分数% 使用dplyr: 输入%select N
因为您已经在data.table语法中使用ifelse对此进行了标记
我认为data.table的开发版本中也有fcase,它类似于dplyr中的case_,使编写这种嵌套的ifelse变得容易 因为您已在data.table语法中使用ifelse对此进行了标记 我认为data.table的开发版本中也有fcase,它类似于dplyr中的case_,使编写这种嵌套的ifelse变得容易 我们可以在data.table中使用fifelse 或者使用data.table的devel版本中的fcase 我们可以在data.table中使用fifelse 或者使用data.table的devel版本中的fcase
@也许你有个好主意!!我发布了一个data.table解决方案。请查收。thanks@akrun也许你有个好主意!!我发布了一个data.table解决方案。请查收。非常感谢,太棒了。我的问题是,如果一个组在score1和score2中都有分数,我该如何澄清以覆盖该问题?在这些情况下,我该如何指定在NEWVAR中始终输入“1”?这仅仅是if语句的顺序吗?是的,这是我们在其中设置的条件的顺序。因此,如果%score1中的anySCORE%为真,即使%score2中的anySCORE%为真,它也将始终返回1。这太好了,谢谢。我最后一个想法是为什么使用“ifelse”而不是“fifelse”?没有具体原因。在这种情况下,两者的工作方式是相似的。非常感谢,这太棒了。我的问题是,如果一个组在score1和score2中都有分数,我该如何澄清以覆盖该问题?在这些情况下,我该如何指定在NEWVAR中始终输入“1”?这仅仅是if语句的顺序吗?是的,这是我们在其中设置的条件的顺序。因此,如果%score1中的anySCORE%为真,即使%score2中的anySCORE%为真,它也将始终返回1。这太好了,谢谢。我最后一个想法是为什么使用“ifelse”而不是“fifelse”?没有具体原因。在这种情况下,两者的工作方式相似。
data=data.frame(GROUP=c(1,1,1,2,2,2,3,3,3,4,4,4),
VAR=c('A','B','C','A','B','C','A','B','C','A','B','C'),
SCORE=c(3,6,NA,NA,NA,NA,1,NA,5,5,2,NA),
NEWVAR=c(1,1,1,NA,NA,NA,2,2,2,1,1,1))
score1 = c(2,3,7)
score2 = c(0,5,6)
scores = list(score1, score2)
ave(data$SCORE, data$GROUP, FUN = function(x){
chk = sapply(scores, function(y) any(y %in% x))
seq_along(scores)[chk][1]
})
# [1] 1 1 1 NA NA NA 2 2 2 1 1 1
library(data.table)
setDT(data)[, NEWVAR := ifelse(any(SCORE %in% score1), 1,
ifelse(any(SCORE %in% score2), 2, NA_integer_)), GROUP]
data
# GROUP VAR SCORE NEWVAR
# 1: 1 A 3 1
# 2: 1 B 6 1
# 3: 1 C NA 1
# 4: 2 A NA NA
# 5: 2 B NA NA
# 6: 2 C NA NA
# 7: 3 A 1 2
# 8: 3 B NA 2
# 9: 3 C 5 2
#10: 4 A 5 1
#11: 4 B 2 1
#12: 4 C NA 1
library(data.table)
setDT(data)[, NEWVAR := fifelse(any(SCORE %in% score1), 1,
fifelse(any(SCORE %in% score2), 2, NA_integer_)), GROUP]
data
# GROUP VAR SCORE NEWVAR
# 1: 1 A 3 1
# 2: 1 B 6 1
# 3: 1 C NA 1
# 4: 2 A NA NA
# 5: 2 B NA NA
# 6: 2 C NA NA
# 7: 3 A 1 2
# 8: 3 B NA 2
# 9: 3 C 5 2
#10: 4 A 5 1
#11: 4 B 2 1
#12: 4 C NA 1
setDT(data)[, NEWVAR := fcase(any(SCORE %in% score1), 1,
any(SCORE %in% score2), 2,
default = NA_integer_), GROUP]