R中的多行多列数据帧
我对R比较陌生,正在尝试以某种方式将重复行的日期框转换为列。我想要的是在tidyr中沿着传播线()的方向,但我相信它有点不同,因为我似乎无法正确地得到它。根据公司、Loc和类型,每个记录都是唯一的,多个规范行以列的形式展开。每个唯一记录有不同数量的规格,最多可达20个规格 我所拥有的 Company Loc Type Spec 100000012 104 51 363 100000012 104 51 431 100000012 104 51 508 100000012 104 51 512 100000012 104 51 513 100000012 126 51 513 100000012 166 53 530 100000012 42 51 516 100000012 43 53 530 100123545 50 52 513 100123545 50 52 363 公司Loc类型规范 100000012 104 51 363 100000012 104 51 431 100000012 104 51 508 100000012 104 51 512 100000012 104 51 513 100000012 126 51 513 100000012 166 53 530 100000012 42 51 516 100000012 43 53 530 100123545 50 52 513 100123545 50 52 363 我想要什么 Company Loc Type Spec1 Spec2 Spec3 Spec4 Spec5 100000012 104 51 363 431 508 512 513 100000012 126 51 513 100000012 166 53 530 100000012 42 51 516 100000012 43 53 530 100123545 50 52 513 363 公司Loc类型规范1规范2规范3规范4规范5 100000012 104 51 363 431 508 512 513 100000012 126 51 513 100000012 166 53 530 100000012 42 51 516 100000012 43 53 530 100123545 50 52 513 363R中的多行多列数据帧,r,dataframe,transpose,dplyr,tidyr,R,Dataframe,Transpose,Dplyr,Tidyr,我对R比较陌生,正在尝试以某种方式将重复行的日期框转换为列。我想要的是在tidyr中沿着传播线()的方向,但我相信它有点不同,因为我似乎无法正确地得到它。根据公司、Loc和类型,每个记录都是唯一的,多个规范行以列的形式展开。每个唯一记录有不同数量的规格,最多可达20个规格 我所拥有的 Company Loc Type Spec 100000012 104 51 363 100000012 104 51 43
我们可以使用
dcast
library(data.table)
dcast(setDT(df1), Company + Loc + Type ~
paste0("Spec", rowid(Company, Loc, Type)), value.var = "Spec")
我们还可以使用和
库(dplyr)
图书馆(tidyr)
dat2%
集团(公司,Loc)%>%
变异(ID=0(“Spec”,1:n())%>%
解组()%>%
排列(ID,规格)%>%
选择(c(“公司”、“Loc”、“类型”),粘贴0(“规格”,1:(ncol()-3)))
dat2
##tibble:6 x 8
#公司Loc类型规范1规范2规范3规范4规范5
#
#1 100000012 42 51 516不适用不适用不适用不适用不适用
#2 100000012 43 53 530纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳
# 3 100000012 104 51 363 431 508 512 513
#4 100000012 126 51 513不适用不适用不适用不适用不适用不适用
#51000000012 166 53 530纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳
#6 100123545 50 52 513 363 NA NA NA NA
数据
dat <- read.table(text = "Company Loc Type Spec
100000012 104 51 363
100000012 104 51 431
100000012 104 51 508
100000012 104 51 512
100000012 104 51 513
100000012 126 51 513
100000012 166 53 530
100000012 42 51 516
100000012 43 53 530
100123545 50 52 513
100123545 50 52 363",
header = TRUE)
dat谢谢!我用了这个选项,看起来不错。当我在更大的数据集上执行此操作时,Spec列被排序为Spec1、Spec11、spec12等,而不是Spec1、Spec2等。我尝试在mutate中使用“01”,但没有修复。除了上面的代码之外,还需要修复吗?@JoeHafer请查看我的更新。最后一个select
调用用于排列列。
dat <- read.table(text = "Company Loc Type Spec
100000012 104 51 363
100000012 104 51 431
100000012 104 51 508
100000012 104 51 512
100000012 104 51 513
100000012 126 51 513
100000012 166 53 530
100000012 42 51 516
100000012 43 53 530
100123545 50 52 513
100123545 50 52 363",
header = TRUE)