【发布时间】:2021-12-12 18:20:42
【问题描述】:
我的意见:
df <- data.frame("Foo"=c("a","c","NG-c","d","e","f"), "Bar"=c("b","b","c","d","e","f"), "Baz" = c("a","a","c","NG-c","NG-c","d")
"Gaz" = c("NG-c","NG-c","NG-c", "NG-a","NG-a","NG-a"))
patern <- c("a","c")
一个问题看起来有点复杂。我尝试 find&count&compare 通过模式数据框中的每一列。例如 - 我想找到所有匹配的NG-c 并在哪一列中输出每列中NG-c 占总数的最大百分比。
我的代码:
bg <- c()
for (i in ncol(df)) {
for (pt in length(patern)) {
tot <- sum(str_count(df[i],patern[pt]))
ng <- sum(str_count(df[i],paste0("NG-",patern[pt] )))
res <- round((ng/tot*100),1)
bg <- c(bg,res)
}
if (bg[pt] >= res) {
print(colnames(df[i]))
}
}
所以我希望看到 Baz 和 Gaz 列名,但我遇到了一些麻烦。
首先我收到警告消息:
if (bg[pt] >= res) { 中的错误:需要 TRUE/FALSE 的缺失值
第二个:
警告消息:1:在 stri_count_regex(string, pattern, opts_regex = opts(pattern)) :参数不是原子向量;胁迫2:在 stri_count_regex(字符串,模式,opts_regex = opts(模式)):
参数不是原子向量;胁迫
也许有更好/更聪明的方法?
【问题讨论】:
-
共享的数据不起作用,返回错误。我认为您缺少逗号 (
,)。你能显示这个数据的预期输出吗?
标签: r dataframe function dplyr tidyverse