首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据R中的条件添加行

根据R中的条件添加行
EN

Stack Overflow用户
提问于 2022-03-11 09:49:17
回答 2查看 321关注 0票数 0

我有一个数据集,其中包含关于正在运行(目前正在运行)或计划中的发电厂的信息(将在将来开放)。然而,在少数情况下,有一些发电厂处于“运行和计划”状态。这些发电厂已经存在,但将在某一特定日期扩大。我需要纠正这一点,将这个异常值的条目加倍,即当发电厂“运行和计划”时,我需要保持当前行(我将将该行重命名为可运行),并创建一个新的相同行来规划状态。<br />

简单地说,我需要做的是,当有一个“运行和计划的”发电厂时,我需要通过创建一个具有相同数据点的新行来将其分解为运行和计划。我不能用ifelse做这件事。有人能给我建议一下吗?

代码语言:javascript
运行
复制
Example<br />

Firm   Status   Production<br />
A     Operating      1000<br />
B     Planned        1030<br />
C     Operating      1000<br />
D     Operating & Planned   1000<br />

Output<br />
Firm   Status   Production<br />
A     Operating      1000<br />
B     Planned        1030<br />
C     Operating      1000<br />
D     Operating   1000<br />
D     Planned   1000<br />
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-11 10:20:36

你在找tidyr::separate_rows

代码语言:javascript
运行
复制
library(tidyr)
separate_rows(df, Status, sep = " & ")

使用@Quinten的数据集:

代码语言:javascript
运行
复制
df <- data.frame(Firm = c("A", "B", "C", "D"),
                 Status = c("Operating", "Planned", "Operating", "Operating & Planned"),
                 Production = c(1000, 1030, 1000, 1000))
df %>% 
  separate_rows(Status, sep = " & ")

# A tibble: 5 x 3
  Firm  Status    Production
  <chr> <chr>          <dbl>
1 A     Operating       1000
2 B     Planned         1030
3 C     Operating       1000
4 D     Operating       1000
5 D     Planned         1000
票数 1
EN

Stack Overflow用户

发布于 2022-03-11 10:20:42

您可以使用包splitstackshape。您可以使用以下代码:

首先,你的数据:

代码语言:javascript
运行
复制
df <- data.frame(Firm = c("A", "B", "C", "D"),
                 Status = c("Operating", "Planned", "Operating", " Operating & Planned"),
                 Production = c(1000, 1030, 1000, 1000))

输出:

代码语言:javascript
运行
复制
  Firm               Status Production
1    A            Operating       1000
2    B              Planned       1030
3    C            Operating       1000
4    D  Operating & Planned       1000

接下来,使用此代码将行拆分为具有相同值的两行:

代码语言:javascript
运行
复制
library(splitstackshape)
df2 <- cSplit(df, "Status", sep = "&", direction = "long")
df2

输出:

代码语言:javascript
运行
复制
   Firm    Status Production
1:    A Operating       1000
2:    B   Planned       1030
3:    C Operating       1000
4:    D Operating       1000
5:    D   Planned       1000
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71436612

复制
相关文章

相似问题

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