对R中数据帧中的特定值使用表摘要

对R中数据帧中的特定值使用表摘要,r,dataframe,R,Dataframe,你好,我有一个df,例如: query G1 G2 G3 G4 G5 SP1 A B NA NA B SP2 B F NA G NA SP3 NA NA NA C B SP4 NA NA NA C C 我想为每个SPN计算A和B的单元数 例如,对于SP1,有3个 对于SP2:1 等,我应该得到 nb SP1 3 SP2 1 SP3 1 SP4 0 谢谢你的帮助你想要这样的东西吗 df<-data.frame(G1=c(

你好,我有一个df,例如:

query    G1 G2 G3 G4 G5
SP1      A  B  NA NA B
SP2      B  F  NA G  NA
SP3      NA NA NA C  B
SP4      NA NA NA C  C
我想为每个SPN计算A和B的单元数

例如,对于SP1,有3个 对于SP2:1 等,我应该得到

    nb
SP1 3
SP2 1
SP3 1
SP4 0

谢谢你的帮助

你想要这样的东西吗

df<-data.frame(G1=c("A","B", NA, NA), G2=c("B","F",NA,NA),G3=c(NA,NA,NA,NA),G4=c(NA,"G","C","C"),G5=c("B",NA,"B","C"))
rownames(df)<-c("SP1","SP2","SP3","SP4")
data.frame(nb=apply(df, 1,function(x) sum(x %in% c("A","B") )))

你想要这样的东西吗

df<-data.frame(G1=c("A","B", NA, NA), G2=c("B","F",NA,NA),G3=c(NA,NA,NA,NA),G4=c(NA,"G","C","C"),G5=c("B",NA,"B","C"))
rownames(df)<-c("SP1","SP2","SP3","SP4")
data.frame(nb=apply(df, 1,function(x) sum(x %in% c("A","B") )))

使用tidyverse,这是否有效:

library(tidyr)
library(dplyr)
library(stringr)
df %>% rownames_to_column('SP') %>% 
   mutate(across(everything(),~ replace_na(.,'0'))) %>% 
   unite(new,-SP,sep='') %>% mutate(nb= str_count(new,'A|B')) %>% 
   column_to_rownames('SP') %>% select(2)
    nb
SP1  3
SP2  1
SP3  1
SP4  0

使用tidyverse,这是否有效:

library(tidyr)
library(dplyr)
library(stringr)
df %>% rownames_to_column('SP') %>% 
   mutate(across(everything(),~ replace_na(.,'0'))) %>% 
   unite(new,-SP,sep='') %>% mutate(nb= str_count(new,'A|B')) %>% 
   column_to_rownames('SP') %>% select(2)
    nb
SP1  3
SP2  1
SP3  1
SP4  0

为了完整起见,我添加以下内容作为答案:

>%cA,B,nrow=nrowdf,dimnames=listdf$query中的rowsumsmatrix.matrixdf%,NULL >SP1 SP2 SP3 SP4 > 3 1 1 0
为了完整起见,我添加以下内容作为答案:

>%cA,B,nrow=nrowdf,dimnames=listdf$query中的rowsumsmatrix.matrixdf%,NULL >SP1 SP2 SP3 SP4 > 3 1 1 0
您好,如果sp名称为query的列是query怎么办?我试图用查询替换“SP”,但它不起作用,我使用了rownames\u to\u列,因为dplyr不携带rownames,所以我们从rownames创建了一个列,最后,我们将该列作为rownames重新存储。您好,如果使用SP名称的列是query怎么办?我试图用query替换'SP',但它不起作用,我使用了rownames_to_列,因为dplyr不携带rownames,所以我们从rownames创建了一个列,最后,我们将该列作为rownames返回。