目前,我尝试学习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)))]
但问题是我得到与输入相同的表。
问题在于使用any
包裹sapply
。sapply
返回逻辑matrix
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 / FALSE值并返回一个 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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句