Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.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 拆分数据帧,重新排列并另存为单独的csv文件_R - Fatal编程技术网

R 拆分数据帧,重新排列并另存为单独的csv文件

R 拆分数据帧,重新排列并另存为单独的csv文件,r,R,我知道这对于R用户来说相当简单,但很难完成这个简单的任务: 我有这个数据框: 数据 set.seed(123) df <- data.frame(ID_series=c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18), year=c(2010,2011,2012,2010,2011,2012,2010,2011,2012,2010,2011,2012, 2010,2011,201

我知道这对于R用户来说相当简单,但很难完成这个简单的任务:

我有这个数据框:

数据

set.seed(123)
df <- data.frame(ID_series=c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18), 
             year=c(2010,2011,2012,2010,2011,2012,2010,2011,2012,2010,2011,2012,
                    2010,2011,2012,2010,2011,2012), 
             IDPlot=c(1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2), 
             value=runif(18, 0.0, 1.0))
set.seed(123)
df <- data.frame(ID_series=c(1,1,1,2,2,2,3,3,3,1,1,1,2,2,2,3,3,3), 
             year=c(2010,2011,2012,2010,2011,2012,2010,2011,2012,2010,2011,2012,
                    2010,2011,2012,2010,2011,2012), 
             IDPlot=c(1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2), 
             value=runif(18, 0.0, 1.0))
set.seed(123)

df您可以将数据转换为宽格式,然后使用
group\u split
将其拆分为不同的数据帧

library(tidyverse)

out <- df %>%
         pivot_wider(names_from = ID_series, values_from = value) %>%
         group_split(IDPlot) 

out
#[[1]]
# A tibble: 3 x 5
#   year IDPlot   `1`    `2`   `3`
#  <dbl>  <dbl> <dbl>  <dbl> <dbl>
#1  2010      1 0.288 0.883  0.528
#2  2011      1 0.788 0.940  0.892
#3  2012      1 0.409 0.0456 0.551

#[[2]]
# A tibble: 3 x 5
#   year IDPlot   `1`   `2`    `3`
#  <dbl>  <dbl> <dbl> <dbl>  <dbl>
#1  2010      2 0.457 0.678 0.900 
#2  2011      2 0.957 0.573 0.246 
#3  2012      2 0.453 0.103 0.0421
数据

set.seed(123)
df <- data.frame(ID_series=c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18), 
             year=c(2010,2011,2012,2010,2011,2012,2010,2011,2012,2010,2011,2012,
                    2010,2011,2012,2010,2011,2012), 
             IDPlot=c(1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2), 
             value=runif(18, 0.0, 1.0))
set.seed(123)
df <- data.frame(ID_series=c(1,1,1,2,2,2,3,3,3,1,1,1,2,2,2,3,3,3), 
             year=c(2010,2011,2012,2010,2011,2012,2010,2011,2012,2010,2011,2012,
                    2010,2011,2012,2010,2011,2012), 
             IDPlot=c(1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2), 
             value=runif(18, 0.0, 1.0))
set.seed(123)

df请提供您的预期输出。你试过什么吗?这对于
数据可能很简单。table::dcast
tidyr::spread
…输出应该是IDPlots指定的单独矩阵[year,ID_series],并存储在IDPlots指定的单独csv文件中……这对您来说足够了吗?非常感谢您的努力…对不起,这还不够清楚。你是说对他们中的一个来说是这样的吗<代码>结构(list(year=c(2012012012012),`1`=c(1,1,1),`2`=c(1,1,1),`3`=c(1,1,1)),class=“data.frame”,row.names=c(NA,-3L))
还有,你试过什么?这能回答你的问题吗@MDEWITT,我认为您忽略了问题的重塑部分(尽管拆分/写入的事情可能是正确的)…感谢您提供的代码…这是一个不错的选择,但是,在我的原始数据集中(我没有提供它,因为它包含超过21行),IDPlot中的ID_系列名称会发生变化。因此,我需要一个选项,其中“拆分”将首先进行,然后拆分的数据帧将被重塑为具有矩阵[year,ID_series],最后这些重塑的矩阵将存储到新的单独数据帧中。再次感谢所有提供想法的人@请检查更新的答案。它首先拆分,然后将其转换为宽格式。这就是你想要的吗?…是的,这很有效,完美!非常感谢!