基于这个问题:用 R 中的 apply 系列函数替换 for 循环 (当然,这个问题的组成很差,提到的实现简直太糟糕了,但我开始对一个特定的点感兴趣,我把它说成一个单独的问题)。
这里我们有一个表格,我们需要在每一行中删除所有不满足特定条件的单元格,并且在那些满足特定条件的单元格中,只留下一个(例如,最左边的一个)。如果没有这样的单元格,则完全删除该行。
好吧,为了更复杂 - 第一列中的值不需要检查,也不需要删除。也就是说,应该保留一个包含两列的表。
源表示例:
set.seed(42)
cbind(letters[1:5], matrix(sapply(sample(5:10,20,replace=T),\
function(x) paste0(sample(letters,x),collapse="")),ncol=4))
# [,1] [,2] [,3] [,4] [,5]
# [1,] "a" "xdzvbkhrio" "ovegszxa" "fjwxqpk" "clsqrdxfzm"
# [2,] "b" "tujparvdqk" "dflepahju" "apurjlkzg" "itjprdacmw"
# [3,] "c" "jkawzu" "pdior" "puijmvohqr" "opemd"
# [4,] "d" "xpzohvuwa" "ofcbgzad" "gsvnwt" "lhceqiu"
# [5,] "e" "tqeglozu" "yxrhlpmvd" "wotcqnz" "mkdsnqpr"
并且作为单元格必须对应的条件,让有一个子字符串'm'(它几乎出现在每一行,甚至不止一次)。
即,因此,您需要获得下表:
# [,1] [,2]
# [1,] "a" "clsqrdxfzm"
# [2,] "b" "itjprdacmw"
# [3,] "c" "puijmvohqr"
# [4,] "e" "yxrhlpmvd"
让表存储在一个变量中
m。首先,应用它(逐行)
grepl(),立即只返回第一个找到的单元格(如果有多个)或NA(如果没有找到单元格):现在
cbind()我们将源表的第一列作为函数附加到这个向量(作为一列):几乎正是您所需要的!剩下的只是删除第二列中没有值的行。此功能将有所帮助
is.na():