dplyr基于其他具有不同后缀的列进行突变

用户名

我有一个与此类似的数据框:

df <- data.frame(a_1_1 = c(1, 0, 1), a_1_2=c(1,0,0),a_2_1=c(1,0,0), a_2_2=c(1,0 ,1), b=c(2,3,4))

我想通过以下列方式比较具有相同前缀的列来创建新变量:

df <- df %>% mutate(a_1=case_when((a_1_1==1 | a_1_2==1)~"A", TRUE ~ "B")) %>% 
mutate(a_2=case_when((a_2_1==1 | a_2_2==1)~"A", TRUE ~ "B"))

但是,在我的真实数据中,我有很多以“ a_ *”开头的变量,因此我想创建这些变量而不必一次对每个变量进行一次操作。

阿克伦

一个选项across通过循环通过柱,与“a”后跟一个开始_和一些数字,然后_并在结束数字1( $的字符串,利用case_when在该列(.)并将该值返回(get通过)通过使用更改列名(cur_column()将相应的列str_replace指定为对应的列_new,然后将新列的后缀指定为,然后在下一步中使用来重命名这些列rename_with

library(dplyr)
library(stringr)
df %>% 
  mutate(across(matches('^a_\\d+_1$'), 
   ~ case_when(. == 1| get(str_replace(cur_column(), '_\\d+$', '_2')) == 1 ~ 'A',
      TRUE ~ 'B'), .names = '{.col}_new')) %>%
  rename_with(~ str_remove(., '_\\d+_new'), ends_with('new'))

-输出

#  a_1_1 a_1_2 a_2_1 a_2_2 b a_1 a_2
#1     1     1     1     1 2   A   A
#2     0     0     0     0 3   B   B
#3     1     0     0     1 4   A   A

或另一种选择是用于pivot_longer重塑为“长”格式,并使其更易于进行比较以创建新列,使用来将其重塑为宽格式,pivot_wider然后将这些新列绑定到原始数​​据

library(tidyr)
df %>%
  select(-b) %>% 
  mutate(rn = row_number()) %>%
  pivot_longer(cols = -rn, names_to = c('grp', '.value'),
      names_sep = "_(?=\\d+$)") %>% 
  transmute(rn, grp, val = case_when(`1` == 1|`2` == 1 ~ 'A',
       TRUE ~ 'B')) %>% 
  pivot_wider(names_from = grp, values_from = val) %>% 
  select(-rn) %>% 
  bind_cols(df, .)

base Rsplit.default

df[paste0("a_", 1:2)] <- ifelse(
     sapply(split.default(df[startsWith(names(df), "a_")],  
     sub("_\\d+$", "", grep("^a_", names(df), value = TRUE))),
      rowSums) > 0, 'A', 'B')

或使用for循环

nm1 <- unique(sub("_\\d+$", "", grep('^a_\\d+', names(df), value = TRUE)))
for(nm in nm1) df[[nm]] <- ifelse(rowSums(df[startsWith(names(df), 
      nm)]) > 0, "A", "B")

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用具有基于其他列的值的临时列进行SELECT

来自分类Dev

使用具有基于其他列的值的临时列进行SELECT

来自分类Dev

基于具有相似数据的其他列的总和列

来自分类Dev

计算其他列中具有不同值的条目

来自分类Dev

根据其他列值对动态列名称进行突变

来自分类Dev

基于具有不同参数的多个其他函数创建单个函数

来自分类Dev

Pyspark基于具有列表或集合的多个条件的其他列创建新列

来自分类Dev

SQL SELECT:具有基于其他列的值的新列

来自分类Dev

使用dplyr基于R中的其他两个列自定义对新列进行变异

来自分类Dev

在python中合并具有相同列而其他列不同的csv文件

来自分类Dev

基于其他列对列中的总数进行计数-R

来自分类Dev

MySQL选择具有唯一列值的行与其他列进行比较

来自分类Dev

删除一列中具有重复值但其他列中具有不同值的行

来自分类Dev

删除一列中具有重复值但其他列中具有不同值的行

来自分类Dev

基于MISMO的XML与其他XML有何不同?

来自分类Dev

Excel-列表返回具有重复值的其他列的不同数据

来自分类Dev

在其他2列中访问具有相同ID但值不同的选择行

来自分类Dev

如何合并具有重复值和其他不同值的数据框列值?

来自分类Dev

React.js具有基于其他状态的状态

来自分类Dev

根据其他表对具有冻结的第一列的JTable进行排序

来自分类Dev

如何在具有分层索引的熊猫数据框中添加和计算(基于其他列)子列?

来自分类Dev

使用dplyr高效汇总具有不同功能的不同列

来自分类Dev

熊猫删除对一列具有不同价值的行,但对所有其他列重复

来自分类Dev

如何发送具有不同域的gitlab电子邮件进行后缀,SMTP和邮件中继

来自分类Dev

如何在基于一个列的其他表中查找具有相同值的表名

来自分类Dev

dplyr :: mutate_at()依赖于具有给定前缀/后缀的多列

来自分类Dev

如何根据其他列的类别更改具有不同百分比值的列的值

来自分类Dev

更新列值以反映具有两个不同大小的数据帧的其他列值

来自分类Dev

给定具有varchar列的表,请返回不同行中没有任何后缀的条目

Related 相关文章

  1. 1

    使用具有基于其他列的值的临时列进行SELECT

  2. 2

    使用具有基于其他列的值的临时列进行SELECT

  3. 3

    基于具有相似数据的其他列的总和列

  4. 4

    计算其他列中具有不同值的条目

  5. 5

    根据其他列值对动态列名称进行突变

  6. 6

    基于具有不同参数的多个其他函数创建单个函数

  7. 7

    Pyspark基于具有列表或集合的多个条件的其他列创建新列

  8. 8

    SQL SELECT:具有基于其他列的值的新列

  9. 9

    使用dplyr基于R中的其他两个列自定义对新列进行变异

  10. 10

    在python中合并具有相同列而其他列不同的csv文件

  11. 11

    基于其他列对列中的总数进行计数-R

  12. 12

    MySQL选择具有唯一列值的行与其他列进行比较

  13. 13

    删除一列中具有重复值但其他列中具有不同值的行

  14. 14

    删除一列中具有重复值但其他列中具有不同值的行

  15. 15

    基于MISMO的XML与其他XML有何不同?

  16. 16

    Excel-列表返回具有重复值的其他列的不同数据

  17. 17

    在其他2列中访问具有相同ID但值不同的选择行

  18. 18

    如何合并具有重复值和其他不同值的数据框列值?

  19. 19

    React.js具有基于其他状态的状态

  20. 20

    根据其他表对具有冻结的第一列的JTable进行排序

  21. 21

    如何在具有分层索引的熊猫数据框中添加和计算(基于其他列)子列?

  22. 22

    使用dplyr高效汇总具有不同功能的不同列

  23. 23

    熊猫删除对一列具有不同价值的行,但对所有其他列重复

  24. 24

    如何发送具有不同域的gitlab电子邮件进行后缀,SMTP和邮件中继

  25. 25

    如何在基于一个列的其他表中查找具有相同值的表名

  26. 26

    dplyr :: mutate_at()依赖于具有给定前缀/后缀的多列

  27. 27

    如何根据其他列的类别更改具有不同百分比值的列的值

  28. 28

    更新列值以反映具有两个不同大小的数据帧的其他列值

  29. 29

    给定具有varchar列的表,请返回不同行中没有任何后缀的条目

热门标签

归档