首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有在R中循环复制值的方法?

有没有在R中循环复制值的方法?
EN

Stack Overflow用户
提问于 2022-05-23 17:39:19
回答 1查看 69关注 0票数 0

我正在为我的硕士论文处理一个非常混乱的数据集,我需要一些帮助,将值从一列复制到其他列。

我需要做的是:

  1. I需要将第1行的值复制到同一行的列price_close中,
  2. 需要将第2行的值复制到第1行
  3. 中的列price_high中,我需要将第3行的值复制到第1行
  4. 中的列price_low中,我需要将第4行的值复制到第1
  5. 中的列price_open >我需要将第5行的值复制到第1行中的列shares_outstanding H 210G 211

所有公司和日期都需要这样做。因此,我需要为下一家公司做同样的程序。意思:

  1. I需要将来自row+5的值复制到同一行的列price_close中,
  2. 需要将row+6中的值复制到row+5
  3. 中的列price_high中,我需要将row+7中的值复制到row+5
  4. 中的price_low列中,我需要从row+8将值复制到row+5<代码>H 121中的列
  5. 中,我需要从row+6中获得的值复制到行+5<代码中的列>H 222G 223/code>

数据集太大,无法手工完成。但是,我认为在R中使用循环是可能的,因为“复制”在整个数据集中遵循相同的模式。如果是这样的话,我真的很希望得到一些解决这个问题的指导。谢谢!

在附图中,您可以看到我的数据是什么样子的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-23 17:55:01

您所描述的是将您的数据从“长格式转换为宽格式”。搜索这个短语会在R中找到很多方法来实现这一点,这里有一个,您可以使用来自tidyr的pivot_wider(),如下所示:

(编辑后使用@Axeman建议的separate() )

代码语言:javascript
运行
复制
library(dplyr)
library(tidyr)
df %>%
  separate(col = "variable", into = c("company", "metric"), sep = " - ") %>%
  pivot_wider(id_cols = c("company", "date"), names_from = "metric", values_from = "value")
#>     company       date Price Close High Price Price Low Opening price
#> 1 Company 1 2022-01-01         5.5        6.0       5.0           5.0
#> 2 Company 2 2022-01-01         3.5        7.0       8.0           1.0
#> 3 Company 1 2022-01-02         5.4        5.9       4.9           4.8
#>   Common Shares Outstanding
#> 1                      1000
#> 2                      5000
#> 3                      1000

数据:

代码语言:javascript
运行
复制
df <- data.frame(variable = c("Company 1 - Price Close",
                              "Company 1 - High Price",
                              "Company 1 - Price Low",
                              "Company 1 - Opening price",
                              "Company 1 - Common Shares Outstanding",
                              "Company 2 - Price Close",
                              "Company 2 - High Price",
                              "Company 2 - Price Low",
                              "Company 2 - Opening price",
                              "Company 2 - Common Shares Outstanding",
                              "Company 1 - Price Close",
                              "Company 1 - High Price",
                              "Company 1 - Price Low",
                              "Company 1 - Opening price",
                              "Company 1 - Common Shares Outstanding"),
                 date = c(rep("2022-01-01", 10), rep("2022-01-02", 5)),
                 value = c(5.5, 6, 5, 5, 1000,
                           3.5, 7, 8, 1, 5000,
                           5.4, 5.9, 4.9, 4.8, 1000))

由reprex包在2022-05-23上创建(v2.0.1)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72352713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档