R -对某些列的每行中出现的特定字符进行计数,并将结果存储在新列中

xdnvmnnf  于 2023-02-14  发布在  其他
关注(0)|答案(2)|浏览(106)

我有一个数据框

Var1 <- c("Hnt_Pri_Pri_Sec_Sup", "Hnt_Sup_Sup_Sec_Sec", "Hnt_Pri_Sec_Pri_Sup")
Var2 <- c("LiG_Pri_Sec_Sec_Sup", "LiG_Sec_Sup_Pri_Sup", "LiG_Pri_Pri_Pri_Pri")
Var3 <- c("Nam_Pri_Pri_Sec_Pri", "Nam_Sec_Sec_Sup_Pri", "Nam_Sup_Pri_Pri_Sec")
df <- data.frame(Var1, Var2, Var3)

> df
                 Var1                Var2                Var3
1 Hnt_Pri_Pri_Sec_Sup LiG_Pri_Sec_Sec_Sup Nam_Pri_Pri_Sec_Pri
2 Hnt_Sup_Sup_Sec_Sec LiG_Sec_Sup_Pri_Sup Nam_Sec_Sec_Sup_Pri
3 Hnt_Pri_Sec_Pri_Sup LiG_Pri_Pri_Pri_Pri Nam_Sup_Pri_Pri_Sec

其中,我希望对每行计数字符"Pri"出现的次数,并将结果存储在附加列中,使得:

> df
                 Var1                Var2                Var3 pri_count
1 Hnt_Pri_Pri_Sec_Sup LiG_Pri_Sec_Sec_Sup Nam_Pri_Pri_Sec_Pri         6
2 Hnt_Sup_Sup_Sec_Sec LiG_Sec_Sup_Pri_Sup Nam_Sec_Sec_Sup_Pri         2
3 Hnt_Pri_Sec_Pri_Sup LiG_Pri_Pri_Pri_Pri Nam_Sup_Pri_Pri_Sec         8

如果我对"Sec"执行相同的操作,它应该返回:

> df
                 Var1                Var2                Var3 pri_count sec_count
1 Hnt_Pri_Pri_Sec_Sup LiG_Pri_Sec_Sec_Sup Nam_Pri_Pri_Sec_Pri         6         4
2 Hnt_Sup_Sup_Sec_Sec LiG_Sec_Sup_Pri_Sup Nam_Sec_Sec_Sup_Pri         2         5
3 Hnt_Pri_Sec_Pri_Sup LiG_Pri_Pri_Pri_Pri Nam_Sup_Pri_Pri_Sec         8         2

我尝试了str_count的不同用法,但无法使其工作。有人能帮忙吗?

b4wnujal

b4wnujal1#

您可以将rowSums与stringr包中的str_count结合使用,来计算数据框中每行字符串的出现次数。下面是计算“Pri”出现次数的示例:

library(stringr)
df$pri_count <- rowSums(sapply(df, function(x) str_count(x, "Pri")))

下面是一个计算“Sec”出现次数的示例:

df$sec_count <- rowSums(sapply(df, function(x) str_count(x, "Sec")))
yb3bgrhw

yb3bgrhw2#

library(tidyverse)

df %>%  
  mutate(
    pri_count = rowSums(across(starts_with("Var"), ~ str_count(.x, "Pri"))), 
    sec_count = rowSums(across(starts_with("Var"), ~ str_count(.x, "Sec")))
  )

# A tibble: 3 × 5
  Var1                Var2                Var3                pri_count sec_count
  <chr>               <chr>               <chr>                   <dbl>     <dbl>
1 Hnt_Pri_Pri_Sec_Sup LiG_Pri_Sec_Sec_Sup Nam_Pri_Pri_Sec_Pri         6         4
2 Hnt_Sup_Sup_Sec_Sec LiG_Sec_Sup_Pri_Sup Nam_Sec_Sec_Sup_Pri         2         5
3 Hnt_Pri_Sec_Pri_Sup LiG_Pri_Pri_Pri_Pri Nam_Sup_Pri_Pri_Sec         8         2

相关问题