R 拆分数据帧,重新排列并另存为单独的csv文件
我知道这对于R用户来说相当简单,但很难完成这个简单的任务: 我有这个数据框: 数据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
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],最后这些重塑的矩阵将存储到新的单独数据帧中。再次感谢所有提供想法的人@请检查更新的答案。它首先拆分,然后将其转换为宽格式。这就是你想要的吗?…是的,这很有效,完美!非常感谢!