r - 读取多个数据帧并使用 R 中的循环进行重组
问题描述
我有几个具有相同结构(不同迭代)的数据框。我想从每次迭代中读取数据并使用 dplyr 进行重组。然后将重组后的输出编译成单个数据帧。我认为最好的方法是通过循环,但我没有成功创建一个。
我有 5 个数据集,如下所示。
> df.0
v1 v2 v3 v4 v5 v6 v7
1 0 -3.82029420 31.81448 301.4946 180 42 21
2 1 -3.57029420 31.81448 301.4946 188 35 21
3 2 -3.32029420 31.81448 301.4946 196 30 21
4 3 -3.07029420 31.81448 301.4946 204 25 21
df.1
v1 v2 v3 v4 v5 v6 v7
1 0 -3.826521174 31.81448 301.4946 180 43 21
2 1 -3.576521174 31.81448 301.4946 188 36 21
3 2 -3.326521174 31.81448 301.4946 196 30 21
4 3 -3.076521174 31.81448 301.4946 204 25 21
我想阅读每一个并执行此重组。
rs.0 = df.0 %>%
group_by(v7) %>%
slice(1) %>%
ungroup() %>%
filter(!v7 == 21) %>%
mutate(Level = ifelse(v7 == 22, "II",
ifelse(v7 == 23, "III",
ifelse(v7 == 24, "IV", NA))),
iteration = 0) %>%
dplyr::select(iteration, v1, v7) %>%
spread(key = "Level", value = "v1")
然后 rbind 将输出绑定到单个数据帧中,每次迭代都有一行,如下所示:
A tibble: 2 x 4
iteration II III IV
* <dbl> <int> <int> <int>
1 0 19 29 40
2 1 19 28 39
解决方案
我不确定您要做什么,但是您可以调查将数据框放入列表中:
dfList = list(df.0,df.1,df.2,df.3.df.4)
然后lapply
与进行重组的函数结合使用:
newList = lapply(dfList,functionYouShouldMake)
然后你可以用do.call
(我认为)将它们全部绑定在一起。类似于以下内容:
goodDF = do.call(rbind,newList)
注意,您的重组代码存在一些问题。filter(!v7 == 21)
删除示例数据框中的所有行,除非这些只是前几行?无论如何,拥有更好的示例数据会很好。
这也行不通
dplyr::select(iteration, v1, v7) %>% spread(key = "Level", value = "v1")
因为在调用它之前select
去掉它。Level
spread
推荐阅读
- python - 从 Torchvision 模型中的 DICOM 文件上传数据
- javascript - NodeJS将文本缓冲区转换为可查看的HTML页面
- mysql - 是否可以在 GORM 的 OnConflict 子句中添加两个值?
- python - glOrtho 不工作它仍然被映射到默认坐标
- reactjs - 259 / 5000 Wyniki tłumaczenia 搜索引擎 - 从状态数组中消失的项目
- python - 尝试使用 Python 将解析的数据导出到 CSV 文件,但我不知道如何导出多于一行
- typescript - 如何确保 ionic-selectable 可以运行 onChange 事件两次?
- ios - PHAsset 视频 EXIF 元数据检索
- c++ - C++ 随机字符串输出问题
- python - 我收到一个错误“
当我使用 __slots__ 时返回了带有错误集的结果