在R中,将多列的行总和分配给其他列

用户名

希望有人可以告诉我如何使用更优雅的方式来简化我的代码,以完成我在R中要做的事情。

现有的data.frame:

names <- c("ADD1_T1", "ADD2_T1", "ADD3_T1", "ADD4_T1", "ADD5_T1", "ADD6_T1", "ADD7_T1", "ADD8_T1", "ADD9_T1", "SS_ADD1_T1", "SS_ADD2_T1", "SS_ADD3_T1", "SS_ADD4_T1", "SS_ADD5_T1", "SS_ADD6_T1", "SS_ADD7_T1", "SS_ADD8_T1", "SS_ADD9_T1", "TT_ADD1_T1", "TT_ADD2_T1", "TT_ADD3_T1", "TT_ADD4_T1", "TT_ADD5_T1", "TT_ADD6_T1", "TT_ADD7_T1", "TT_ADD8_T1", "TT_ADD9_T1", "XX_ADD1_T1", "XX_ADD2_T1", "XX_ADD3_T1", "XX_ADD4_T1", "XX_ADD5_T1", "XX_ADD6_T1", "XX_ADD7_T1", "XX_ADD8_T1", "XX_ADD9_T1", "GG_ADD1_T1", "GG_ADD2_T1", "GG_ADD3_T1", "GG_ADD4_T1", "GG_ADD5_T1", "GG_ADD6_T1", "GG_ADD7_T1", "GG_ADD8_T1", "GG_ADD9_T1", "ADD1_T2", "ADD2_T2", "ADD3_T2", "ADD4_T2", "ADD5_T2", "ADD6_T2", "ADD7_T2", "ADD8_T2", "ADD9_T2", "SS_ADD1_T2", "SS_ADD2_T2", "SS_ADD3_T2", "SS_ADD4_T2", "SS_ADD5_T2", "SS_ADD6_T2", "SS_ADD7_T2", "SS_ADD8_T2", "SS_ADD9_T2", "TT_ADD1_T2", "TT_ADD2_T2", "TT_ADD3_T2", "TT_ADD4_T2", "TT_ADD5_T2", "TT_ADD6_T2", "TT_ADD7_T2", "TT_ADD8_T2", "TT_ADD9_T2", "XX_ADD1_T2", "XX_ADD2_T2", "XX_ADD3_T2", "XX_ADD4_T2", "XX_ADD5_T2", "XX_ADD6_T2", "XX_ADD7_T2", "XX_ADD8_T2", "XX_ADD9_T2", "GG_ADD1_T2", "GG_ADD2_T2", "GG_ADD3_T2", "GG_ADD4_T2", "GG_ADD5_T2", "GG_ADD6_T2", "GG_ADD7_T2", "GG_ADD8_T2", "GG_ADD9_T2")
df <- data.frame()
for (k in names) df[[k]] <- as.character()
df[nrow(df)+20,] <- NA
df[10:ncol(df)] <- sample(0:1, size = 20, replace = TRUE)

希望在R中使用尽可能少的代码行执行以下操作。是否可以只使用几行代码(而不是18行)?

ADD1_T1  = as.numeric(rowSums(df[, c("SS_ADD1_T1" , "TT_ADD1_T1" , "XX_ADD1_T1" , "GG_ADD1_T1") ], na.rm=TRUE)>0)
ADD2_T1  = as.numeric(rowSums(df[, c("SS_ADD2_T1" , "TT_ADD2_T1" , "XX_ADD2_T1" , "GG_ADD2_T1") ], na.rm=TRUE)>0)
...
ADD9_T1  = as.numeric(rowSums(df[, c("SS_ADD9_T1" , "TT_ADD9_T1" , "XX_ADD9_T1" , "GG_ADD9_T1") ], na.rm=TRUE)>0)

...

ADD1_T2  = as.numeric(rowSums(df[, c("SS_ADD1_T2" , "TT_ADD1_T2" , "XX_ADD1_T2" , "GG_ADD1_T2") ], na.rm=TRUE)>0)
ADD2_T2  = as.numeric(rowSums(df[, c("SS_ADD2_T2" , "TT_ADD2_T2" , "XX_ADD2_T2" , "GG_ADD2_T2") ], na.rm=TRUE)>0)
...
ADD9_T2  = as.numeric(rowSums(df[, c("SS_ADD9_T2" , "TT_ADD9_T2" , "XX_ADD9_T2" , "GG_ADD9_T2") ], na.rm=TRUE)>0)
完善

考虑将所有列实际定义为数字

for (k in names) df[[k]] <- as.numeric()

从那里,你可以通过创建与干名的载体创建成果的矩阵outer+paste0和迭代与sapply+ grep

ADD_nms <- as.vector(outer(1:9, 1:2, function(x,y) paste0("ADD", x, "_T", y)))
ADD_nms
# [1] "ADD1_T1" "ADD2_T1" "ADD3_T1" "ADD4_T1" "ADD5_T1" "ADD6_T1" "ADD7_T1" 
# [8] "ADD8_T1" "ADD9_T1" "ADD1_T2" "ADD2_T2" "ADD3_T2" "ADD4_T2" "ADD5_T2" 
# [15] "ADD6_T2" "ADD7_T2" "ADD8_T2" "ADD9_T2"

ADD_matrix <- sapply(ADD_nms, function(x) 
    as.numeric(rowSums(df[, grep(x, names(df))], na.rm=TRUE)>0))

ADD_matrix

Online Demo

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用R将宽数据中的一列中的值分配给其他列

来自分类Dev

(Julia)将DataFrame列总和分配给新列

来自分类Dev

R-将data.frame中的值/因子分配给以其他列的值为条件的列

来自分类Dev

将值分配给特定行中的列列表

来自分类Dev

将唯一的组ID分配给具有相同列值且其他值分开的行集

来自分类Dev

根据其他列值熊猫将值分配给新列

来自分类Dev

基于某些其他列值将条件值分配给多个列

来自分类Dev

熊猫-如果匹配条件和其他列中定义的时间范围,则将值分配给行

来自分类Dev

将值分配给R中其他矩阵的空矩阵

来自分类Dev

将结果分配给数据框的多列

来自分类Dev

外壳解析csv文件,将字段分配给变量,然后将其打印在多列中

来自分类Dev

外壳解析csv文件,将字段分配给变量,然后将其打印在多列中

来自分类Dev

如何将输出分配给行和列?

来自分类Dev

将ID分配给连续的组列r

来自分类Dev

r 根据值将字符分配给列

来自分类Dev

将值分配给Matlab中的列

来自分类Dev

将值分配给Pandas中的多个列

来自分类Dev

将值分配给Matlab中的列

来自分类Dev

行中的Python csv列名称并分配给列

来自分类Dev

将组 ID 分配给特定列中具有相同值的行

来自分类Dev

从R中的向量将值分配给数据框的一列

来自分类Dev

根据逻辑表达式将值分配给R数据框中的新列

来自分类Dev

R colnames()将列表中的每个元素分配给第一列

来自分类Dev

R:将数据框列分配给函数中的变量

来自分类Dev

将日期分配给R中列向量的每个元素

来自分类Dev

在 R 中的循环之前将 NA 分配给新列

来自分类Dev

将NumericVector分配给DataFrame的列

来自分类Dev

将NumericVector分配给DataFrame的列

来自分类Dev

将列内容分配给类别

Related 相关文章

  1. 1

    如何使用R将宽数据中的一列中的值分配给其他列

  2. 2

    (Julia)将DataFrame列总和分配给新列

  3. 3

    R-将data.frame中的值/因子分配给以其他列的值为条件的列

  4. 4

    将值分配给特定行中的列列表

  5. 5

    将唯一的组ID分配给具有相同列值且其他值分开的行集

  6. 6

    根据其他列值熊猫将值分配给新列

  7. 7

    基于某些其他列值将条件值分配给多个列

  8. 8

    熊猫-如果匹配条件和其他列中定义的时间范围,则将值分配给行

  9. 9

    将值分配给R中其他矩阵的空矩阵

  10. 10

    将结果分配给数据框的多列

  11. 11

    外壳解析csv文件,将字段分配给变量,然后将其打印在多列中

  12. 12

    外壳解析csv文件,将字段分配给变量,然后将其打印在多列中

  13. 13

    如何将输出分配给行和列?

  14. 14

    将ID分配给连续的组列r

  15. 15

    r 根据值将字符分配给列

  16. 16

    将值分配给Matlab中的列

  17. 17

    将值分配给Pandas中的多个列

  18. 18

    将值分配给Matlab中的列

  19. 19

    行中的Python csv列名称并分配给列

  20. 20

    将组 ID 分配给特定列中具有相同值的行

  21. 21

    从R中的向量将值分配给数据框的一列

  22. 22

    根据逻辑表达式将值分配给R数据框中的新列

  23. 23

    R colnames()将列表中的每个元素分配给第一列

  24. 24

    R:将数据框列分配给函数中的变量

  25. 25

    将日期分配给R中列向量的每个元素

  26. 26

    在 R 中的循环之前将 NA 分配给新列

  27. 27

    将NumericVector分配给DataFrame的列

  28. 28

    将NumericVector分配给DataFrame的列

  29. 29

    将列内容分配给类别

热门标签

归档