R将列名称串联到新列中,同时按其值排序

芳基

我正在尝试连接一个字符串,该字符串通过它们的值标识列的顺序。

set.seed(100)

df <- tibble(id = 1:5,
             col1 = sample(1:50, 5),
             col2 = sample(1:50, 5),
             col3 = sample(1:50, 5)) %>% 
  mutate_at(vars(-id), ~if_else(. <= 20, NA_integer_, .))

# A tibble: 5 x 4
     id  col1  col2  col3
  <int> <int> <int> <int>
1     1    NA    44    NA
2     2    38    23    34
3     3    48    22    NA
4     4    25    NA    48
5     5    NA    NA    43

res <- df %>% 
  add_column(order = c('col2',
                       'col2_col3_co1',
                       'col2_col1',
                       'col1_col3',
                       'col3'))

# A tibble: 5 x 5
     id  col1  col2  col3 order        
  <int> <int> <int> <int> <chr>        
1     1    NA    44    NA col2         
2     2    38    23    34 col2_col3_co1
3     3    48    22    NA col2_col1    
4     4    25    NA    48 col1_col3    
5     5    NA    NA    43 col3 

我当前的数据是df格式,而我要添加的列是res中的order列。字符串中元素的顺序由每列的值确定,并且还需要跳过NA。我正在尝试确定每个ID在每一列中填充值的顺序,因为这些值是以天为单位的时间。但是,并非所有ID的所有列都具有值,因此,整个值中都缺少值。我通常在tidyverse内工作,但是任何解决方案或想法都将不胜感激。

阿克伦

一个更简单的选择是apply,在行(MARGIN = 1)上循环,删除NA元素,order其余非NA,使用索引来获取列名和paste它们在一起

df$order <- apply(df[-1], 1, function(x) {x1 <- x[!is.na(x)]
           paste(names(x1)[order(x1)], collapse="_")})
df$order
#[1] "col2"           "col2_col3_col1" "col2_col1"      "col1_col3"      "col3" 

或使用 tidyverse

library(dplyr)
library(tidyr)
library(stringr)
df %>%
   pivot_longer(cols = -id, values_drop_na = TRUE) %>%
   arrange(id,  value) %>%
   group_by(id) %>%
   summarise(order = str_c(name, collapse="_")) %>% 
   right_join(df) %>%
   select(names(df), order)
# A tibble: 5 x 5
#     id  col1  col2  col3 order         
#  <int> <int> <int> <int> <chr>         
#1     1    NA    44    NA col2          
#2     2    38    23    34 col2_col3_col1
#3     3    48    22    NA col2_col1     
#4     4    25    NA    48 col1_col3     
#5     5    NA    NA    43 col3       

或使用pmappurrr

library(purrr)
df %>% 
   mutate(order = pmap_chr(select(., starts_with('col')), ~
         {x <- c(...)
         x1 <- x[!is.na(x)]
         str_c(names(x1)[order(x1)], collapse="_")}))

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

获取按名称在DataFrame中的值排序的列名

来自分类Dev

将2列串联到VBA中的新列中

来自分类Dev

是否可以按列名中的值对列进行排序?

来自分类Dev

按列名称分组->该列中的特定值

来自分类Dev

同时按多列对R中的数据框进行排序

来自分类Dev

同时按多列对R中的数据框进行排序

来自分类Dev

Oracle将值排序到列中

来自分类Dev

将某些值按其名称分组到列

来自分类Dev

CosmosDB将结果按值排序到数组中

来自分类Dev

如果数据框中的列名称相同,则串联这些列

来自分类Dev

按C列排序,但将F列中的值分组

来自分类Dev

R:如何将(最后一个)列名作为值复制到新列?

来自分类Dev

按列名称拆分R中的矩阵

来自分类Dev

新列的列名称来自最大列(按索引熊猫)

来自分类Dev

在Python中按字典的值按降序对其排序,其键按升序对字典进行排序

来自分类Dev

将最后X列的值求和到新列中

来自分类Dev

将熊猫组中的值堆叠到新列中

来自分类Dev

“无法将值NULL插入列...” SqlException,同时将哈希值插入到列中

来自分类Dev

根据熊猫中的条件将列名称列表作为新列返回

来自分类Dev

按特定顺序对列名称进行排序

来自分类Dev

在DataGridView中按列排序之前如何验证列名

来自分类Dev

列名称与数据属性名称不匹配时,按列进行角度排序

来自分类Dev

在r中打印列名称套用并另存为数据框上的新列

来自分类Dev

在r中打印列名称套用并另存为数据框上的新列

来自分类Dev

如何按R中的列名对数据框进行排序?

来自分类Dev

按列中的nil值排序

来自分类Dev

列中的列名 -> 将指定列的值复制到单列

来自分类Dev

如何将列名称转换为熊猫中的列值-python

来自分类Dev

按列名创建新列

Related 相关文章

  1. 1

    获取按名称在DataFrame中的值排序的列名

  2. 2

    将2列串联到VBA中的新列中

  3. 3

    是否可以按列名中的值对列进行排序?

  4. 4

    按列名称分组->该列中的特定值

  5. 5

    同时按多列对R中的数据框进行排序

  6. 6

    同时按多列对R中的数据框进行排序

  7. 7

    Oracle将值排序到列中

  8. 8

    将某些值按其名称分组到列

  9. 9

    CosmosDB将结果按值排序到数组中

  10. 10

    如果数据框中的列名称相同,则串联这些列

  11. 11

    按C列排序,但将F列中的值分组

  12. 12

    R:如何将(最后一个)列名作为值复制到新列?

  13. 13

    按列名称拆分R中的矩阵

  14. 14

    新列的列名称来自最大列(按索引熊猫)

  15. 15

    在Python中按字典的值按降序对其排序,其键按升序对字典进行排序

  16. 16

    将最后X列的值求和到新列中

  17. 17

    将熊猫组中的值堆叠到新列中

  18. 18

    “无法将值NULL插入列...” SqlException,同时将哈希值插入到列中

  19. 19

    根据熊猫中的条件将列名称列表作为新列返回

  20. 20

    按特定顺序对列名称进行排序

  21. 21

    在DataGridView中按列排序之前如何验证列名

  22. 22

    列名称与数据属性名称不匹配时,按列进行角度排序

  23. 23

    在r中打印列名称套用并另存为数据框上的新列

  24. 24

    在r中打印列名称套用并另存为数据框上的新列

  25. 25

    如何按R中的列名对数据框进行排序?

  26. 26

    按列中的nil值排序

  27. 27

    列中的列名 -> 将指定列的值复制到单列

  28. 28

    如何将列名称转换为熊猫中的列值-python

  29. 29

    按列名创建新列

热门标签

归档