gpt4 book ai didi

将头部字符串的多列替换为一列

转载 作者:行者123 更新时间:2023-12-04 10:03:11 25 4
gpt4 key购买 nike

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

  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") 例如,但手动执行此操作将花费太长时间。必须有更好的方法,对吗?

提前致谢!

最佳答案

你可以做:

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

更通用的解决方案:
new2 <- data.frame(
A=apply(dat[, grepl("^A", names(dat))]==1, 1, myfu),
B=apply(dat[, grepl("^B", names(dat))]==1, 1, myfu))
new2

关于将头部字符串的多列替换为一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61730276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com