如何在R中创建多个新的逻辑列(基于数字变量的截止序列)?

发布于 2025-02-13 20:42:37 字数 414 浏览 1 评论 0原文

我正在分析生存数据,我希望能够根据1:24的阈值来计算逻辑向量,并将其放在数据框架中。

例如,获取此示例数据:

set.seed(1988)

test <- tibble(
  survival = c(sample(1:40,10, replace =T))
)

我想迅速创建名为“ rencevival1”,“ rence2”等的新列,直至“ rence24” - 具有逻辑值,基于生存&GT;临界点。

由于我对Dplyr最熟悉,到目前为止,我一直在手动突变,

test %>% mutate(survival1 = survival > 1, survival2 = survival > 2)

但是我认为必须有更好的方法!

I'm analysing survival data, and i am hoping to take a column of survival durations and calculate logical vectors based on a threshold of 1:24 - and put this together in a dataframe.

For example, take this sample data:

set.seed(1988)

test <- tibble(
  survival = c(sample(1:40,10, replace =T))
)

I would like to rapidly create new columns titled "survival1","survival2" etc - up to "survival24" - with logical values based on whether survival > threshold.

As i'm most familiar with dplyr I've thus far been manually mutating e.g.

test %>% mutate(survival1 = survival > 1, survival2 = survival > 2)

But i thought there must be a better way!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

久伴你 2025-02-20 20:42:38

我无法弄清楚如何在一个步骤中创建和命名列,但是就我所获得的而言:

library(tidyverse)

set.seed(1988)

test <- tibble(
  survival = c(sample(1:40,10, replace =T))
)

test %>%
  mutate(suppressMessages(map_dfc(1:24, ~ test$survival > .x))) %>%
  rename_with(~ paste0("survival", 1:24), starts_with("..."))
#> # A tibble: 10 × 25
#>    survival survival1 survival2 survival3 survival4 survival5 survival6
#>       <int> <lgl>     <lgl>     <lgl>     <lgl>     <lgl>     <lgl>    
#>  1       18 TRUE      TRUE      TRUE      TRUE      TRUE      TRUE     
#>  2       32 TRUE      TRUE      TRUE      TRUE      TRUE      TRUE     
#>  3        2 TRUE      FALSE     FALSE     FALSE     FALSE     FALSE    
#>  4       34 TRUE      TRUE      TRUE      TRUE      TRUE      TRUE     
#>  5       38 TRUE      TRUE      TRUE      TRUE      TRUE      TRUE     
#>  6       19 TRUE      TRUE      TRUE      TRUE      TRUE      TRUE     
#>  7       20 TRUE      TRUE      TRUE      TRUE      TRUE      TRUE     
#>  8       12 TRUE      TRUE      TRUE      TRUE      TRUE      TRUE     
#>  9       23 TRUE      TRUE      TRUE      TRUE      TRUE      TRUE     
#> 10        7 TRUE      TRUE      TRUE      TRUE      TRUE      TRUE     
#> # … with 18 more variables: survival7 <lgl>, survival8 <lgl>, survival9 <lgl>,
#> #   survival10 <lgl>, survival11 <lgl>, survival12 <lgl>, survival13 <lgl>,
#> #   survival14 <lgl>, survival15 <lgl>, survival16 <lgl>, survival17 <lgl>,
#> #   survival18 <lgl>, survival19 <lgl>, survival20 <lgl>, survival21 <lgl>,
#> #   survival22 <lgl>, survival23 <lgl>, survival24 <lgl>

在2022-07-08创建的 reprex package (v2.0.1)

I can't figure out how to create and name the columns in a single step, but here is as far as I got:

library(tidyverse)

set.seed(1988)

test <- tibble(
  survival = c(sample(1:40,10, replace =T))
)

test %>%
  mutate(suppressMessages(map_dfc(1:24, ~ test$survival > .x))) %>%
  rename_with(~ paste0("survival", 1:24), starts_with("..."))
#> # A tibble: 10 × 25
#>    survival survival1 survival2 survival3 survival4 survival5 survival6
#>       <int> <lgl>     <lgl>     <lgl>     <lgl>     <lgl>     <lgl>    
#>  1       18 TRUE      TRUE      TRUE      TRUE      TRUE      TRUE     
#>  2       32 TRUE      TRUE      TRUE      TRUE      TRUE      TRUE     
#>  3        2 TRUE      FALSE     FALSE     FALSE     FALSE     FALSE    
#>  4       34 TRUE      TRUE      TRUE      TRUE      TRUE      TRUE     
#>  5       38 TRUE      TRUE      TRUE      TRUE      TRUE      TRUE     
#>  6       19 TRUE      TRUE      TRUE      TRUE      TRUE      TRUE     
#>  7       20 TRUE      TRUE      TRUE      TRUE      TRUE      TRUE     
#>  8       12 TRUE      TRUE      TRUE      TRUE      TRUE      TRUE     
#>  9       23 TRUE      TRUE      TRUE      TRUE      TRUE      TRUE     
#> 10        7 TRUE      TRUE      TRUE      TRUE      TRUE      TRUE     
#> # … with 18 more variables: survival7 <lgl>, survival8 <lgl>, survival9 <lgl>,
#> #   survival10 <lgl>, survival11 <lgl>, survival12 <lgl>, survival13 <lgl>,
#> #   survival14 <lgl>, survival15 <lgl>, survival16 <lgl>, survival17 <lgl>,
#> #   survival18 <lgl>, survival19 <lgl>, survival20 <lgl>, survival21 <lgl>,
#> #   survival22 <lgl>, survival23 <lgl>, survival24 <lgl>

Created on 2022-07-08 by the reprex package (v2.0.1)

鱼忆七猫命九 2025-02-20 20:42:38

使用基本R

for(i in 1:24){
    `[[`(test , paste0("survival" , i)) <- 
        sapply(test$survival ,\(x) x > i )
}
  • 输出
# A tibble: 10 × 25
   survival survival1 survival2 survival3 survival4 survival5
      <int> <lgl>     <lgl>     <lgl>     <lgl>     <lgl>    
 1       18 TRUE      TRUE      TRUE      TRUE      TRUE     
 2       32 TRUE      TRUE      TRUE      TRUE      TRUE     
 3        2 TRUE      FALSE     FALSE     FALSE     FALSE    
 4       34 TRUE      TRUE      TRUE      TRUE      TRUE     
 5       38 TRUE      TRUE      TRUE      TRUE      TRUE     
 6       19 TRUE      TRUE      TRUE      TRUE      TRUE     
 7       20 TRUE      TRUE      TRUE      TRUE      TRUE     
 8       12 TRUE      TRUE      TRUE      TRUE      TRUE     
 9       23 TRUE      TRUE      TRUE      TRUE      TRUE     
10        7 TRUE      TRUE      TRUE      TRUE      TRUE     
# … with 19 more variables: survival6 <lgl>, survival7 <lgl>,
#   survival8 <lgl>, survival9 <lgl>, survival10 <lgl>,
#   survival11 <lgl>, survival12 <lgl>, survival13 <lgl>,
#   survival14 <lgl>, survival15 <lgl>, survival16 <lgl>,
#   survival17 <lgl>, survival18 <lgl>, survival19 <lgl>,
#   survival20 <lgl>, survival21 <lgl>, survival22 <lgl>,
#   survival23 <lgl>, survival24 <lgl>

Using base R

for(i in 1:24){
    `[[`(test , paste0("survival" , i)) <- 
        sapply(test$survival ,\(x) x > i )
}
  • Output
# A tibble: 10 × 25
   survival survival1 survival2 survival3 survival4 survival5
      <int> <lgl>     <lgl>     <lgl>     <lgl>     <lgl>    
 1       18 TRUE      TRUE      TRUE      TRUE      TRUE     
 2       32 TRUE      TRUE      TRUE      TRUE      TRUE     
 3        2 TRUE      FALSE     FALSE     FALSE     FALSE    
 4       34 TRUE      TRUE      TRUE      TRUE      TRUE     
 5       38 TRUE      TRUE      TRUE      TRUE      TRUE     
 6       19 TRUE      TRUE      TRUE      TRUE      TRUE     
 7       20 TRUE      TRUE      TRUE      TRUE      TRUE     
 8       12 TRUE      TRUE      TRUE      TRUE      TRUE     
 9       23 TRUE      TRUE      TRUE      TRUE      TRUE     
10        7 TRUE      TRUE      TRUE      TRUE      TRUE     
# … with 19 more variables: survival6 <lgl>, survival7 <lgl>,
#   survival8 <lgl>, survival9 <lgl>, survival10 <lgl>,
#   survival11 <lgl>, survival12 <lgl>, survival13 <lgl>,
#   survival14 <lgl>, survival15 <lgl>, survival16 <lgl>,
#   survival17 <lgl>, survival18 <lgl>, survival19 <lgl>,
#   survival20 <lgl>, survival21 <lgl>, survival22 <lgl>,
#   survival23 <lgl>, survival24 <lgl>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文