R 具有两个变量的扩展键
我需要用两个变量存储一个数据帧,但我不能用tidyr包。 在我的示例中,我想将month变量添加到键中,类似于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
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')