R 具有两个变量的扩展键

R 具有两个变量的扩展键,r,tidyverse,R,Tidyverse,我需要用两个变量存储一个数据帧,但我不能用tidyr包。 在我的示例中,我想将month变量添加到键中,类似于key=c(“level”,“month”) 以下是我所做的: library(tidyr) library(dplyr) set.seed(123) name <- sample(letters[1:5], 10, replace = T) level <- sample(1:3, 10, replace = T) month <- sample(1:12, 10

我需要用两个变量存储一个数据帧,但我不能用tidyr包。 在我的示例中,我想将month变量添加到键中,类似于
key=c(“level”,“month”)

以下是我所做的:

library(tidyr)
library(dplyr)

set.seed(123)

name <- sample(letters[1:5], 10, replace = T)
level <- sample(1:3, 10, replace = T)
month <- sample(1:12, 10, replace = T)

df <- data.frame(name, level, month)

df  %>% 
  group_by(name, month, level) %>%
  summarise(n = n()) %>% 
  ungroup() %>% 
  spread(., level, n, sep = "_")
library(tidyr)
图书馆(dplyr)
种子集(123)
姓名%
排列(,水平,n,sep=“389;”)

谢谢

一个选项将是
tidyr的开发版本中的
pivot\u wide
(似乎“n”将是
基于“月”、“级别”组合的价差

library(dplyr)
library(tidyr) # 0.8.3.9000
df %>% 
  group_by(name, month, level) %>%
  summarise(n = n()) %>% 
  ungroup() %>%
  pivot_wider(names_from = c('month', 'level'), values_from = 'n')
# A tibble: 5 x 11
#  name  `5_3` `3_3` `4_1` `12_2` `1_1` `9_3` `10_1` `10_3` `7_1` `11_1`
#  <fct> <int> <int> <int>  <int> <int> <int>  <int>  <int> <int>  <int>
#1 a         1    NA    NA     NA    NA    NA     NA     NA    NA     NA
#2 b        NA     1     1      1    NA    NA     NA     NA    NA     NA
#3 c        NA    NA    NA     NA     1     1      1      1    NA     NA
#4 d        NA    NA    NA     NA    NA    NA     NA     NA     1     NA
#5 e        NA    NA    NA     NA    NA    NA     NA     NA    NA      1

或者使用
data.table中的
dcast

library(data.table)
dcast(setDT(df)[, .N, .(name, month, level)], name ~ month + level, value.var = 'N')

你能展示一下预期的输出应该是什么样子吗?检查@akrun output,类似的东西,谢谢你,谢谢你,我的R没有找到pivot\u更广泛的函数(我将tidyr包更新为0.8.3版本)@DimitriPetrenko。我使用了开发版本的
tidyr
0.8.3.9000
。您可以从
github安装它
谢谢我会检查的it@DimitriPetrenko. 你也可以
unite
(更新了答案)然后
spread
非常感谢你,这正是我所需要的,所有这些可能性都很有趣
library(data.table)
dcast(setDT(df)[, .N, .(name, month, level)], name ~ month + level, value.var = 'N')