【问题标题】:Extact frequencies from logical lists for every row从每一行的逻辑列表中提取频率
【发布时间】:2020-02-27 15:31:40
【问题描述】:

拥有这样的数据框:

data.frame(id = c(1,1), matrix = c("c(\"TRUE\", \"TRUE\")", "c(\"FALSE\", \"TRUE\", \"FALSE\")"))
id                      matrix
1  1           c("TRUE", "TRUE")
2  1 c("FALSE", "TRUE", "FALSE")

如何计算每一行的真、假和总数的频率?

预期输出示例

id true_num false_num frq_list
1     2        0         2
1     1        2         3

【问题讨论】:

  • 您是如何创建该 data.frame 的?您的“矩阵”列被格式化为因子/字符值,这很奇怪。必须重新解析这些值,以便您可以使用它们进行操作。如果这些没有转化为字符值,那么使用起来会更容易,所以也许值得回过头来尝试先解决这个问题。

标签: r


【解决方案1】:

您可以尝试使用正则表达式,因为您的“逻辑”向量已经只是一个字符串:

library(tidyverse)
data.frame(id = c(1,1), matrix = c("c(\"TRUE\", \"TRUE\")", "c(\"FALSE\", \"TRUE\", \"FALSE\")")) %>% 
  transmute(id = id,
            true_num = str_count(matrix, pattern = 'T'),
            false_num = str_count(matrix, pattern = 'F'),
            frq_list = true_num + false_num)
#>   id true_num false_num frq_list
#> 1  1        2         0        2
#> 2  1        1         2        3

这是否真的是一个的想法是另一个问题。

【讨论】:

  • 谢谢。我收到此错误 Error: Column id` can't be modified 因为它是一个分组变量`
  • 该错误意味着您之前在管道中使用了group_by。您需要在执行transmute-ing 之前添加ungroup
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-01
  • 1970-01-01
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
  • 2013-10-01
  • 1970-01-01
相关资源
最近更新 更多