首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中自动创建宽数据集中的更改变量

在R中自动创建宽数据集中的更改变量
EN

Stack Overflow用户
提问于 2022-07-20 18:16:26
回答 2查看 35关注 0票数 1

我有一个广泛的数据集,包含大约150个生物标志物的300列--每个生物标志物都有一个基线值和一个最终值。我需要为每个生物标志物创建一个变化变量(最终-基线)。当我有10个变量时,我一直在手动地这样做,但我希望有一个更自动化的解决方案。这就是我目前正在做的事情:

代码语言:javascript
复制
df$marker1_chg = df$marker1_final - df$marker1_bl
df$marker2_chg = df$marker2_final - df$marker2_bl

下面是一个示例数据集:

代码语言:javascript
复制
data <- data.frame(c(1, 2, 3, 4, 5),
                   c(2, 2.3, 3.4, 3.6, 4.1),
                   c(3.1, 4.3, 4.4, 2.3, 4.6),
                   c(2.2, 5.4, 6.9, 3.9, 2.1),
                   c(3.5, 4.1, 6.7, 5.4, 3.8))
colnames(data) <- c('id', 'marker1_bl', 'marker1_final', 'marker2_bl', 'marker2_final')
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-20 19:32:01

另一种可能的解决办法是:

代码语言:javascript
复制
library(tidyverse)

map2_dfc(select(data, ends_with("_final")) %>% relocate(order(names(.))), 
         select(data, ends_with("_bl")) %>% relocate(order(names(.))), 
         ~ .x - .y) %>% 
  set_names(str_replace(names(.), "final", "chg")) %>% 
  bind_cols(data, .)

#>   id marker1_bl marker1_final marker2_bl marker2_final marker1_chg marker2_chg
#> 1  1        2.0           3.1        2.2           3.5         1.1         1.3
#> 2  2        2.3           4.3        5.4           4.1         2.0        -1.3
#> 3  3        3.4           4.4        6.9           6.7         1.0        -0.2
#> 4  4        3.6           2.3        3.9           5.4        -1.3         1.5
#> 5  5        4.1           4.6        2.1           3.8         0.5         1.7
票数 1
EN

Stack Overflow用户

发布于 2022-07-20 18:29:04

尝尝这个

代码语言:javascript
复制
lst <- list()
for(i in 1:150){
    lst[[i]] <- data[[paste0("marker" , i , "_final")]] - data[[paste0("marker" , i , "_bl")]]
}

names(lst) <- paste0("marker" , 1:150 , "_ch")

ans <- data.frame(lst)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73056423

复制
相关文章

相似问题

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