在列中循环搜索R中的多个变量

在列中循环搜索R中的多个变量,r,dataframe,loops,count,R,Dataframe,Loops,Count,对不起,这是一个后续问题。我试图计算每列中有多少个“S”和“T”从1到10行显示为“下游”,然后从15到25行显示为“上游” ST当有多个元素要比较时,我们可以在%中使用%,而不是= library(dplyr) df_trial %>% summarise(across(everything(), ~ c(sum(.[1:10] %in% c('S', 'T')), sum(.[15:25] %in% c('S', 'T'))))) %>%

对不起,这是一个后续问题。我试图计算每列中有多少个“S”和“T”从1到10行显示为“下游”,然后从15到25行显示为“上游”


ST当有多个元素要比较时,我们可以在%中使用
%,而不是
=

library(dplyr)
df_trial %>%
   summarise(across(everything(), ~
       c(sum(.[1:10] %in% c('S', 'T')),
         sum(.[15:25] %in% c('S', 'T'))))) %>% 
   mutate(categ = c('upstream', 'downstream'), .before = 1)
-输出

#        categ V1 V2 V3 V4 V5
#1   upstream  0  4  2  3  2
#2 downstream  1  5  3  5  4

==
正在进行元素级比较。如果我们使用一个以上的元素作为
==c(“S”,“T”)
进行
=
,那么它将向量元素循环到列的整个长度,即“S”与列的第一个元素进行比较,“T”与第二个元素,“S”再次与第三个元素进行比较,依此类推。。。i、 e.比较将以立场为基础


base R
中,我们可以执行
colSums

  colSums(df_trial == 'S') + colSums(df_trial == 'T')

当有多个元素要比较时,我们可以在%
中使用
%,而不是
=

library(dplyr)
df_trial %>%
   summarise(across(everything(), ~
       c(sum(.[1:10] %in% c('S', 'T')),
         sum(.[15:25] %in% c('S', 'T'))))) %>% 
   mutate(categ = c('upstream', 'downstream'), .before = 1)
-输出

#        categ V1 V2 V3 V4 V5
#1   upstream  0  4  2  3  2
#2 downstream  1  5  3  5  4

==
正在进行元素级比较。如果我们使用一个以上的元素作为
==c(“S”,“T”)
进行
=
,那么它将向量元素循环到列的整个长度,即“S”与列的第一个元素进行比较,“T”与第二个元素,“S”再次与第三个元素进行比较,依此类推。。。i、 e.比较将以立场为基础


base R
中,我们可以执行
colSums

  colSums(df_trial == 'S') + colSums(df_trial == 'T')

在base R中,您可以执行以下操作:

data.frame(categ = c('upstream', 'downstream'), 
           sapply(df_trial, function(x) 
         c(sum(x[1:10] %in% c('S', 'T')), sum(x[15:25] %in% c('S', 'T')))))

#       categ V1 V2 V3 V4 V5
#1   upstream  0  4  2  3  2
#2 downstream  1  5  3  5  4

在base R中,您可以执行以下操作:

data.frame(categ = c('upstream', 'downstream'), 
           sapply(df_trial, function(x) 
         c(sum(x[1:10] %in% c('S', 'T')), sum(x[15:25] %in% c('S', 'T')))))

#       categ V1 V2 V3 V4 V5
#1   upstream  0  4  2  3  2
#2 downstream  1  5  3  5  4
使用基数R

> rbind(downstream = sapply(df[1:10,], function(x) sum(grepl('[ST]',x))),
+      upstream = sapply(df[15:25,], function(x) sum(grepl('[ST]',x))))
           V1 V2 V3 V4 V5
downstream  0  4  2  3  2
upstream    1  5  3  5  4
> 
使用的数据:

> dput(df)
structure(list(V1 = c("C", "C", "V", "A", "C", "C", "V", "A", 
"R", "W", "S", "Q", "C", "C", "V", "A", "C", "C", "V", "A", "R", 
"W", "S", "G", "N"), V2 = c("D", "A", "T", "T", "D", "A", "T", 
"T", "V", "R", "N", "A", "D", "A", "T", "T", "D", "A", "T", "T", 
"V", "R", "N", "A", "T"), V3 = c("E", "M", "Q", "S", "E", "M", 
"Q", "S", "D", "H", "I", "S", "E", "M", "Q", "S", "E", "M", "Q", 
"S", "D", "H", "I", "D", "T"), V4 = c("R", "K", "Q", "S", "R", 
"K", "Q", "S", "S", "I", "P", "D", "R", "K", "Q", "S", "R", "K", 
"Q", "S", "S", "I", "P", "S", "S"), V5 = c("N", "P", "E", "S", 
"N", "P", "E", "S", "A", "C", "T", "E", "N", "P", "E", "S", "N", 
"P", "E", "S", "A", "C", "T", "S", "A")), row.names = c(NA, -25L
), class = c("tbl_df", "tbl", "data.frame"))
> 
使用基数R

> rbind(downstream = sapply(df[1:10,], function(x) sum(grepl('[ST]',x))),
+      upstream = sapply(df[15:25,], function(x) sum(grepl('[ST]',x))))
           V1 V2 V3 V4 V5
downstream  0  4  2  3  2
upstream    1  5  3  5  4
> 
使用的数据:

> dput(df)
structure(list(V1 = c("C", "C", "V", "A", "C", "C", "V", "A", 
"R", "W", "S", "Q", "C", "C", "V", "A", "C", "C", "V", "A", "R", 
"W", "S", "G", "N"), V2 = c("D", "A", "T", "T", "D", "A", "T", 
"T", "V", "R", "N", "A", "D", "A", "T", "T", "D", "A", "T", "T", 
"V", "R", "N", "A", "T"), V3 = c("E", "M", "Q", "S", "E", "M", 
"Q", "S", "D", "H", "I", "S", "E", "M", "Q", "S", "E", "M", "Q", 
"S", "D", "H", "I", "D", "T"), V4 = c("R", "K", "Q", "S", "R", 
"K", "Q", "S", "S", "I", "P", "D", "R", "K", "Q", "S", "R", "K", 
"Q", "S", "S", "I", "P", "S", "S"), V5 = c("N", "P", "E", "S", 
"N", "P", "E", "S", "A", "C", "T", "E", "N", "P", "E", "S", "N", 
"P", "E", "S", "A", "C", "T", "S", "A")), row.names = c(NA, -25L
), class = c("tbl_df", "tbl", "data.frame"))
>