Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.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
在多个约束上使用like在R中分组_R_Data.table - Fatal编程技术网

在多个约束上使用like在R中分组

在多个约束上使用like在R中分组,r,data.table,R,Data.table,目前我试图学习R,但我坚持以下几点。 我有这张桌子 material V1 1: Silber 450.7886 2: Kupfer-Nickel 0.0000 3: Silver Tantal 26.9928 4: Bimetall (Silber - Niobium)) 8.9925 现在我想对包含一个可能性列表字符串的

目前我试图学习R,但我坚持以下几点。 我有这张桌子

                       material       V1
1:                       Silber 450.7886
2:                Kupfer-Nickel   0.0000
3:                Silver Tantal  26.9928
4: Bimetall (Silber - Niobium))   8.9925
现在我想对包含一个可能性列表字符串的所有行求和。 我目前的做法是

merge <- c("Silver", "Silber")
materialsSplitted[any(sapply(merge, function(x) grepl(x, material, TRUE)))]

merge问题在于使用
any
包装为
sapply
sapply
返回逻辑
矩阵

materialsSplitted[,sapply(merge, function(x) grepl(x, material, TRUE))]
#     Silver Silber
#[1,]  FALSE   TRUE
#[2,]  FALSE  FALSE
#[3,]   TRUE  FALSE
#[4,]  FALSE   TRUE
当我们用
any
包装时,根据
?any

该值是长度为1的逻辑向量

因此,在这里,它有真/假值,并返回一个
TRUE

materialsSplitted[, any(sapply(merge, function(x) grepl(x, material, TRUE)))]
#[1] TRUE
它作为行索引循环使用以返回所有行。相反,我们需要检查每一行是否有字符串匹配。为此,我们可以使用
Reduce

materialsSplitted[Reduce(`|`, lapply(merge, function(x) grepl(x, material, TRUE)))]
#                       material       V1
#1:                       Silber 450.7886
#2:                Silver Tantal  26.9928
#3: Bimetall (Silber - Niobium))   8.9925

请将输出重新分配给新对象或初始对象。它会创建相同的表。我认为这是
任何
导致问题的原因,请尝试
Reduce(“|”),lapply(merge,
你也可以将merge预组合成一个模式,
patt@Frank感谢你的这个想法,我是一个初学者,我会研究这个问题。也许这是个愚蠢的问题,但它不也适用于行和或列和吗?当应用于逻辑数组时,它或多或少等同于逻辑or(检查结果是否大于0,以将答案作为布尔值)。@Jean-ClaudeArbaut Yes,您可以从
sapply
输出中创建逻辑向量,同时使用
rowSums
rowSums(sapply(…)>0