首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用R和Table函数,我可以使用一个更大的数据集中的4个特定列来创建一个2×2的频率表

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

Stack Overflow用户
提问于 2021-03-18 19:29:12
回答 1查看 37关注 0票数 1

我有几个专栏

代码语言:javascript
复制
 Location|Yes M & M Peanuts| No M& M Peanuts | Yes M & M Almond| No M& M Almond|Location
               5                 10                 20             6                 NYC

我希望使用表函数或更方便的方法将这些列转换为

代码语言:javascript
复制
              Yes | No
M & M Peanuts  5    10
M & M Almond   20    6        

更新的例子

代码语言:javascript
复制
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))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-18 19:34:23

这可以用pivot_longer轻松地完成,指定names_pattern提取值(.value)部分以进入列'Yes‘、'No’和另一个列'grp‘,该列提取列名的后缀部分。然后,可以使用column_to_rownames将“grp”列转换为行名。

代码语言:javascript
复制
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')

-output

代码语言:javascript
复制
#               Yes No
#M & M Peanuts   5 10
#M & M Almond   20  6

在更新后的文章中使用OP的第二个数据集,我们需要在没有“位置”的情况下指定cols

代码语言:javascript
复制
df2 %>% 
  pivot_longer(cols = -Location, names_to = c(".value", "grp"),
    names_pattern = "(Yes|No)\\s*(.*)") %>%
  column_to_rownames('grp')
#              Location Yes No
#M & M Peanuts      NYC   5 10
#M & M Almond       NYC  20  6

数据

代码语言:javascript
复制
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))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66697868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档