重塑和合并R中具有相似值的列

时间:2018-08-06 15:17:35

标签: r dplyr crosstab

我无法使用dplyr来解决这个问题

当前我的数据如下

A1       A2       A3        B1
Option1  Option2  Option3   var1
Option2  Option3  Option1   var2 
Option1  Option2  Option3   var1
Option2  Option3  Option1   var2 

我希望它看起来像这样

Option1  Option2  Option3   B1
2        2        2         var1
2        2        2         var2

所以我可以生成此交叉表

               B1
         var1   var2
Option1  2       2
Option2  2       2
Option3  2       2

1 个答案:

答案 0 :(得分:1)

df = read.table(text = "
A1       A2       A3        B1
Option1  Option2  Option3   var1
Option2  Option3  Option1   var2 
Option1  Option2  Option3   var1
Option2  Option3  Option1   var2 
", header=T, stringsAsFactors=F)

library(tidyverse)

df %>%
  gather(var,Option,-B1) %>%  # reshape dataset
  count(B1,Option) %>%        # count combinations
  spread(B1, n)               # reshape again

# # A tibble: 3 x 3
#    Option   var1  var2
#     <chr>   <int> <int>
# 1 Option1     2     2
# 2 Option2     2     2
# 3 Option3     2     2

如果您喜欢您提到的其他格式:

df %>%
  gather(var,Option,-B1) %>%  # reshape dataset
  count(B1,Option) %>%        # count combinations
  spread(Option, n)           # reshape dataset

# # A tibble: 2 x 4
#   B1    Option1 Option2 Option3
#   <chr>   <int>   <int>   <int>
# 1 var1        2       2       2
# 2 var2        2       2       2