gpt4 book ai didi

r - 基于数据框中的两个旧列创建一个新列

转载 作者:行者123 更新时间:2023-12-02 07:21:04 24 4
gpt4 key购买 nike

data <- data.frame(foo = c(0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1),
bar = c(1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0))

您好,我这里有一个包含两列 foo 和 bar 的数据框。我想根据 foo 和 bar 数据创建一个新的 Complete 列。

  • 如果 foo 和 bar 为零,则 complete 应为 0。
  • 如果 foo 是 1 而 bar 是 0 那么 complete 应该是 1。
  • 如果 bar 是 1 且 foo 是 0 那么 complete 应该是两个。

例如。

foo   bar complete
0 0 0
1 0 1
0 1 2

编辑:

如果 foo==1bar==1NA

最佳答案

依此类推,当两列均为 1 时使用 NA。从行总和开始。如果其中任何一个为 2(列数),则将其替换为 NA。然后将其乘以 max.col() 值。

rs <- rowSums(data)
cbind(data, complete = max.col(data) * replace(rs, rs == 2, NA))
# foo bar complete
# 1 0 1 2
# 2 1 0 1
# 3 0 0 0
# 4 0 0 0
# 5 1 1 NA
# 6 0 0 0
# 7 0 1 2
# 8 0 0 0
# 9 1 0 1
# 10 1 1 NA
# 11 1 0 1

如果您不想分配新对象,您可以使用本地环境或将其包装到一个函数中:

local({
rs <- rowSums(data)
max.col(data) * replace(rs, rs == 2, NA)
})
# [1] 2 1 0 0 NA 0 2 0 1 NA 1

关于r - 基于数据框中的两个旧列创建一个新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46286118/

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