首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在R列中创建一个新的计算范畴

在R列中创建一个新的计算范畴
EN

Stack Overflow用户
提问于 2022-04-26 21:17:19
回答 2查看 39关注 0票数 1

假设我有一个类似于此的数据框架,只有1000个观测值:

代码语言:javascript
运行
复制
df <- data.frame(Group = c('A', 'A', 'A', 'B', 'B',
                           'B','B','C','C','C','D','D','D','D','D'),
                 Values=c('5','7','9','0','8','4','5','2','1','3','6','3','1','3','5'))

我想要做的是根据数据帧中已经存在的组中的值向数据帧中添加一个新的计算组,而不替换原始组的值。例如,假设我想保留组D,但是创建一个具有组D值+2的新组。

我想要的结果数据like的一个例子是:

代码语言:javascript
运行
复制
df <- data.frame(Group = c('A', 'A', 'A', 'B', 'B',
                           'B','B','C','C','C','D','D','D','D','D'
                           ,'Dadjusted','Dadjusted','Dadjusted','Dadjusted','Dadjusted'),
                 Values=c('5','7','9','0','8','4','5','2','1','3','6','3','1','3','5',
                          '8','5','3','5','7'))

我试过使用ifelse语句,如下所示:

代码语言:javascript
运行
复制
   df$adjustedvalues<-ifelse(Group=='D', df$Values+2, df$Values)

但是这种方法产生的数据帧如下所示:

代码语言:javascript
运行
复制
df <- data.frame(Group = c('A', 'A', 'A', 'B', 'B',
                           'B','B','C','C','C','D','D','D','D','D'),
                 Values=c('5','7','9','0','8','4','5','2','1','3','6','3','1','3','5')
                 adjustedvalues=c('5','7','9','0','8','4','5','2','1','3','8','5','3','5','7')

这对我的目的来说不太理想。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-26 21:26:08

以下是一个可能的R基选项:

代码语言:javascript
运行
复制
rbind(df, data.frame(Group = "Dadjusted", 
                     Values = as.integer(df$Values)[df$Group == "D"]+2))

输出

代码语言:javascript
运行
复制
       Group Values
1          A      5
2          A      7
3          A      9
4          B      0
5          B      8
6          B      4
7          B      5
8          C      2
9          C      1
10         C      3
11         D      6
12         D      3
13         D      1
14         D      3
15         D      5
16 Dadjusted      8
17 Dadjusted      5
18 Dadjusted      3
19 Dadjusted      5
20 Dadjusted      7
票数 4
EN

Stack Overflow用户

发布于 2022-04-26 21:38:05

更新:也是一种类似于@Allan的dplyr解决方案,但没有那么优雅:

代码语言:javascript
运行
复制
library(dplyr)

df %>% 
  type.convert(as.is=TRUE) %>% 
  filter(Group=="D") %>% 
  mutate(Group = "Dadjusted",
         Values = Values + 2) %>% 
  bind_rows(df %>% 
              type.convert(as.is = TRUE)) %>% 
  arrange(Group)
代码语言:javascript
运行
复制
         Group Values
1          A      5
2          A      7
3          A      9
4          B      0
5          B      8
6          B      4
7          B      5
8          C      2
9          C      1
10         C      3
11         D      6
12         D      3
13         D      1
14         D      3
15         D      5
16 Dadjusted      8
17 Dadjusted      5
18 Dadjusted      3
19 Dadjusted      5
20 Dadjusted      7
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72020635

复制
相关文章

相似问题

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