微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 R 和 Table 函数,我可以使用更大数据集中的 4 个特定列来创建一个二乘二的频率表吗? 数据

如何解决使用 R 和 Table 函数,我可以使用更大数据集中的 4 个特定列来创建一个二乘二的频率表吗? 数据

我有几列

 Location|Yes M & M Peanuts| No M& M Peanuts | Yes M & M Almond| No M& M Almond|Location
               5                 10                 20             6                 NYC

我想使用 table 函数或更方便的方法将这些列转换为

              Yes | No
M & M Peanuts  5    10
M & M Almond   20    6        

更新示例

df2 <- structure(list(`Yes M & M Peanuts` = 5L,`No M & M Peanuts` = 10L,`Yes M & M Almond` = 20L,`No M & M Almond` = 6L,"Location" = "NYC"),class = "data.frame",row.names = c(NA,-1L))

解决方法

这可以通过 pivot_longer 轻松完成,指定 names_pattern 以提取值 (.value) 部分以进入列“是”、“否”和另一列“grp” ' 提取列名的后缀部分。然后,可以使用 column_to_rownames

将“grp”列转换为行名称
library(dplyr)
library(tidyr)
library(tibble)
df1 %>% 
  pivot_longer(cols = everything(),names_to = c(".value","grp"),names_pattern = "(Yes|No)\\s*(.*)") %>%
  column_to_rownames('grp')

-输出

#               Yes No
#M & M Peanuts   5 10
#M & M Almond   20  6

在更新后的帖子中使用 OP 的第二个数据集,我们需要指定不带“位置”的 cols

df2 %>% 
  pivot_longer(cols = -Location,names_pattern = "(Yes|No)\\s*(.*)") %>%
  column_to_rownames('grp')
#              Location Yes No
#M & M Peanuts      NYC   5 10
#M & M Almond       NYC  20  6

数据

df1 <- structure(list(`Yes M & M Peanuts` = 5L,`No M & M Peanuts` = 10L,`Yes M & M Almond` = 20L,`No M & M Almond` = 6L),class = "data.frame",row.names = c(NA,-1L))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。