Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中的多行多列数据帧_R_Dataframe_Transpose_Dplyr_Tidyr - Fatal编程技术网

R中的多行多列数据帧

R中的多行多列数据帧,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

我对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 363
我们可以使用
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)