首页 > 解决方案 > 如何转换和计算数据?

问题描述

我有一个带有 4 个分类变量的 data.frame,比例为 1-5。

data.frame(
  first=c(2,3,3,2,2),
  second=c(5,5,4,5,5),
  third=c(5,5,5,4,4),
  fourth=c(2,1,1,1,2))

first second third fourth 
  2     5      5     2      
  3     5      5     1     
  3     4      5     1      
  2     5      4     1      
  2     5      4     2     

我想将变量名称转换为一列并对值进行累积计数并将新变量设置为具有分类规模的行。

newvar  1  2  3  4  5  
first   0  3  2  0  0  
second  0  0  0  1  4  
third   0  0  0  2  3
fourth  3  2  0  0  0

标签: r

解决方案


不是最干净的方法,但它确实有效。

您用于pivot_longer将数据转换为长格式。

然后我们可以对数据进行分组并计算每个原始列的出现次数。

使用 将数据转换回宽格式pivot_wider,然后最后两行重新排列数据以匹配所需的输出。

df %>% 
  pivot_longer(c(first:fourth)) %>% 
  count(name, value) %>% 
  pivot_wider(names_from = "value",
              values_from = "n") %>% 
  select(name, `1`, `2`, `3`, `4`, `5`) %>% 
  arrange(match(name, c("first", "second", "third", "fourth")), desc(name))

推荐阅读