微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将函数应用于名称包含 R 中特定字符串的列中的行

如何解决如何将函数应用于名称包含 R 中特定字符串的列中的行

我有一个列名的数据框:X、时间、“indoors_c”和“outdoors_c”。时间 >= 13 时,我想将名称包含字符串“_c”的列中的行值替换为 0。如何在不引用整个列名的情况下执行此操作?我正在使用 R 工作室

解决方法

使用 tidyverse、sse across()contains() 中的函数来选择要应用该函数的列。然后对函数使用 if_else,如果列 time 高于/低于某个值,则放置 0 值。

可重现的小例子:

library(tidyverse)


data <- tibble(X=rnorm(20),time=1:20,indoors_c=rnorm(20),outdoors_c=rnorm(20))

data %>% 
  mutate(across(contains("_c"),~ if_else(time>=13,.)))
#> # A tibble: 20 x 4
#>          X  time indoors_c outdoors_c
#>      <dbl> <int>     <dbl>      <dbl>
#>  1 -1.67       1   -2.41      -1.44  
#>  2  1.00       2    0.113      0.701 
#>  3  0.386      3    0.0248    -0.425 
#>  4  0.266      4   -0.431     -0.0722
#>  5 -0.206      5    0.255     -1.34  
#>  6 -0.617      6    0.441      0.761 
#>  7  1.42       7    0.481     -0.892 
#>  8  0.207      8   -0.112     -0.906 
#>  9  1.42       9   -0.465     -0.527 
#> 10 -0.934     10   -2.21       2.95  
#> 11 -0.419     11   -0.639     -0.113 
#> 12  0.812     12   -0.180      0.440 
#> 13  0.331     13    0          0 
#> 14 -0.454     14    0          0     
#> 15 -0.0290    15    0          0     
#> 16  0.167     16    0          0     
#> 17 -0.150     17    0          0     
#> 18  0.922     18    0          0     
#> 19  1.77      19    0          0     
#> 20  1.62      20    0          0

reprex package (v2.0.0) 于 2021 年 5 月 23 日创建

,

我们可以使用case_when

library(dplyr)
data %>%
    mutate(across(ends_with('_C'),~ case_when(time > 0 ~ 0,TRUE ~ .)))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。