用头字符串将多列替换为一列

我想将数据框的多列替换为每一组的每一列,而我也想更改数字。例:

  A1 A2 A3 A4 B1 B2 B3
1  1  1  0  1  1  0  0
2  1  0  1  1  0  1  1
3  1  1  1  1  0  1  1
4  0  0  1  0  0  0  1
5  0  0  0  0  0  1  0

我想按标题对这个数据框进行排序,这意味着我只希望在这里用一列“ A”代替这里的4,在这里只用列“ B”代替这里的3。数字应按以下方式更改:如果您在“ A2”组中,并且观测值具有数字“ 1”,则应改为“ 2”。如果您在“ A3”组中,并且观测值为“ 1”,则应改为“ 3”。最终结果应该是我要在特定的列和行中包含最高的数字(如果我的行和组中有3个“ 1”,那么将替换所有这些的数字将是一个最高的组) 如果数字为0,则没有任何变化。这是我要寻找的结果:

  A B
1 4 1
2 4 3
3 4 3
4 3 3
5 0 2

如何将所有这些组替换为单个列? (每组一列)

到目前为止,例如,我已经对unite(data = testdata,col =“ A”)函数进行了很多尝试,但是手动执行此操作会花费很长时间。必须有更好的方法,对吗?

提前致谢!

评论
  • lest
    lest 回复

    你可以做:

    dat <- read.table(header=TRUE, text=
     "A1 A2 A3 A4 B1 B2 B3
    1  1  1  0  1  1  0  0
    2  1  0  1  1  0  1  1
    3  1  1  1  1  0  1  1
    4  0  0  1  0  0  0  1
    5  0  0  0  0  0  1  0")
    
    myfu <- function(x) if (any(x)) max(which(x)) else 0
    
    new <- data.frame(
     A=apply(dat[, 1:4]==1, 1, myfu),
     B=apply(dat[, 5:7]==1, 1, myfu))
    new