R检查组中是否存在值
我有“数据”并希望创建“dataWANT”,如果“cat”或“fox”或“dog”中的任何字符串包含“a.b”或“c.e”或“e.W”,则在“WANT1”中包含得分值“1”;如果不是,“WANT1”等于零,如果所有的“猫”、“狐狸”和“狗”都是NA,那么“WANT1”等于“NA”。然后“WANT2”等于第一次出现的select值 需要一个data.table解决方案 dplyr/tidyr 图书馆弹琴 图书馆三年时间更长 想要% pivot_longercat:dog,name_to=pet,value_to=val%>% 组由学生ID%>% 总结 WANT2=0,val[1], WANT1=如果allis.NAVIA_integer_uuELSE+!是naWANT2吗 一个tibble:7x3 学生想要2 WANT1 1 c.e.1 2 a.b.1 3东西1 4 4 0 5 a.b.1 6 6 0 7 NA 通常,当没有公共项时,intersect将返回长度为0的向量。[1]强制执行某些操作,因为字符0[1]返回NA 数据表 图书馆数据表R检查组中是否存在值,r,data.table,R,Data.table,我有“数据”并希望创建“dataWANT”,如果“cat”或“fox”或“dog”中的任何字符串包含“a.b”或“c.e”或“e.W”,则在“WANT1”中包含得分值“1”;如果不是,“WANT1”等于零,如果所有的“猫”、“狐狸”和“狗”都是NA,那么“WANT1”等于“NA”。然后“WANT2”等于第一次出现的select值 需要一个data.table解决方案 dplyr/tidyr 图书馆弹琴 图书馆三年时间更长 想要% pivot_longercat:dog,name_to=pet,v
dat我们可以在Data.table.SD的子集上使用Reduce和%in%循环创建“WANT1”列,检查元素是否是%in%的值向量,使用|将其减少为单个逻辑向量,并将所有“cat”、“fox”、“dog”在“WANT1”中都是NA的行更改为NA。对于WANT2,我们可以在替换除所需值以外的值后使用fcoalesce
顺便说一句:标记是特定于的,它在许多方面与R的base data.frame不同。我换了标签;如果我弄错了,我很抱歉。非常感谢。如果我需要修改它而不是c.e,例如它包含任何带有c.e的字符串,例如c.e5或c.e.q,该怎么办?非常感谢!只需更新wants变量,这就是它存在的原因:更新该变量并重新运行代码,所有这些都应该可以工作。您将其更改回,这是否意味着您正在寻找data.table解决方案?如果是,那么使用data.frame。。。功能是错误的/分散注意力。当你问到c.e和c.e5或c.e.q时,你是指模式吗?如果是这样的话,你需要清楚你的限制,因为这会很有趣。非常感谢是的,是一个data.table解决方案,因为有大数据集,但你的解决方案到目前为止仍然有效。我想对于'wants'变量,我想知道如何在不必列出它们的情况下包括所有包含c.e的度量?例如,每种类型可能超过50个,但核心是c.e
data=data.frame( StudentID =c( 1,2,3,4,5,6,7 ),
cat =c( NA,'a.b','p','o','a.b','cb',NA ),
fox =c( 'c.e','qq',NA,'i','k','c.b',NA ),
dog =c( 'zz','u','e.W','h','g','f',NA ))
library(reshape2)
data1 = melt(data, id.vars = "StudentID")
dataWANT=data.frame( StudentID =c( 1,2,3,4,5,6,7 ),
WANT1 =c( 1,1,1,0,1,0,NA ),
WANT2 =c( 'c.e','a.b','e.W','NA','a.b','NA','NA' ))
library(data.table)
setDT(data)[, WANT1 := +(Reduce(`|`, lapply(.SD, function(x)
x %in% c('a.b', 'c.e', 'e.W')))), .SDcols = cat:dog]
data[is.na(cat) & is.na(fox)& is.na(dog), WANT1 := NA]
data[, WANT2 := do.call(fcoalesce, lapply(.SD,
function(x) replace(x, !x %in% c('a.b', 'c.e', 'e.W'), NA))),
.SDcols = cat:dog]
data[, .(StudentID, WANT1, WANT2)]
# StudentID WANT1 WANT2
#1: 1 1 c.e
#2: 2 1 a.b
#3: 3 1 e.W
#4: 4 0 <NA>
#5: 5 1 a.b
#6: 6 0 <NA>
#7: 7 NA <NA>