【问题标题】:How to count the number of columns containing a particular string in r? [closed]如何计算r中包含特定字符串的列数? [关闭]
【发布时间】:2019-10-25 07:59:13
【问题描述】:

我有一些具有与这些名称相关联的名称和标签的数据。每个名称最多有 94 个标签。每个标签都在一个单独的列中。我需要计算包含特定字符串的列数。我该怎么做?

编辑:示例数据

https://i.stack.imgur.com/eJtwd.png

我想统计包含字符串“WG”的列数。

【问题讨论】:

  • 您能给我们提供可重现的数据吗?
  • 嗨@JimO。我添加了示例数据的图像。

标签: r rstudio data-analysis data-cleaning


【解决方案1】:

我根据不同的情况编了一些数据,abe 有两次苹果,chris 在第三键有苹果,ethan 没有苹果。使用此解决方案,如果不匹配,则删除名称。

library(tidyverse)

my_df<-data.frame(name=c("abe", "ben", "chris", "doug", "ethan"),
                  key1=c("apple", "apple", "banana", "apple", "orange"),
                  key2=c("apple", NA, "orange", NA, NA),
                  key3=c(NA, NA, "apple", NA, NA),
                  stringsAsFactors = FALSE)

my_df %>% gather("key", "tag", -name) %>% group_by(name) %>% filter(tag=="apple") %>% tally()

数据

> my_df
   name   key1   key2  key3
1   abe  apple  apple  <NA>
2   ben  apple   <NA>  <NA>
3 chris banana orange apple
4  doug  apple   <NA>  <NA>
5 ethan orange   <NA>  <NA>

输出

  name      n
1 abe       2
2 ben       1
3 chris     1
4 doug      1

对于您的独特情况,您可能需要探索gather() 函数的工作原理,并可能使用select() 来选择特定列。如果您是 tidyverse 管道的新手,我建议您从运行第一个管道开始,并检查每个短语如何修改数据帧(例如,my_df %&gt;% gather("key", "tag", -name))。

编辑;可以使用 count 函数的内置分组来简化:

my_df%>%gather("key", "tag", -name)%>%filter(tag=="apple")%>%count(name)

【讨论】:

    【解决方案2】:

    这将按行返回包含“WG”的列数。

    apply(X = df,MARGIN = 1,function(t){sum(grepl(pattern = "WG",x = t,fixed = TRUE))})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-13
      • 2014-06-22
      • 2023-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多