gpt4 book ai didi

替换数据帧的非零值

转载 作者:行者123 更新时间:2023-12-01 09:15:51 24 4
gpt4 key购买 nike

我有一个数据框,如下所示的示例数据。

> dput(df)
structure(list(BranchCode = structure(c(9L, 3L, 2L, 1L, 10L,
6L, 8L, 11L, 4L, 5L, 7L), .Label = c("BU", "CA", "GT", "IN",
"LM", "OX", "QC", "SR", "TD", "WG", "YV"), class = "factor"),
Requirement = c(0L, 5L, 12L, 1L, 0L, 0L, 6L, 0L, 3L, 10L,
0L), Availabile = c(3L, 3L, 0L, 7L, 0L, 8L, 0L, 0L, 7L, 3L,
6L), Alternative = c(9L, 0L, 0L, 0L, 10L, 2L, 3L, 8L, 0L,
0L, 5L), Complex = c(3L, 2L, 7L, 5L, 0L, 0L, 7L, 2L, 0L,
6L, 3L), Level1 = c(0L, 6L, 0L, 0L, 6L, 0L, 9L, 0L, 0L, 0L,
0L), Level2 = c(4L, 0L, 0L, 8L, 1L, 6L, 10L, 18L, 0L, 3L,
5L)), .Names = c("BranchCode", "Requirement", "Availabile",
"Alternative", "Complex", "Level1", "Level2"), class = "data.frame", row.names = c(NA,
-11L))

我需要用数字 1 替换所有非零值。我可以通过两种方式做到这一点。

  1. 一次使用一列进行替换,如下所示。然后我每次都必须更改列名称。

    df$Requirement[df$Requirement != 0] <- 1

  2. 我可以写一个基本的for通过遍历索引,根据条件进行循环和替换。

但这两个过程对我来说都需要时间,因为每次列或行都会增加(有时 200 列和 20000 行)。所以我想一次对整个数据帧执行这个过程。就像不逐列替换列或按数据帧上的 for 循环索引一样,我需要用数字 1 替换任何非零数值。如下所示(但不起作用)。

df[which(df[2:7] != 0)] <- 1

最终的数据框如下所示。

> df
BranchCode Requirement Availabile Alternative Complex Level1 Level2
1 TD 0 1 1 1 0 1
2 GT 1 1 0 1 1 0
3 CA 1 0 0 1 0 0
4 BU 1 1 0 1 0 1
5 WG 0 0 1 0 1 1
6 OX 0 1 1 0 0 1
7 SR 1 0 1 1 1 1
8 YV 0 0 1 1 0 1
9 IN 1 1 0 0 0 0
10 LM 1 1 0 1 0 1
11 QC 0 1 1 1 0 1

如果有解决方案或建议就太好了。

最佳答案

你可以做

df[-1] <- as.integer(df[-1] != 0)
df
# BranchCode Requirement Availabile Alternative Complex Level1 Level2
#1 TD 0 1 1 1 0 1
#2 GT 1 1 0 1 1 0
#3 CA 1 0 0 1 0 0
#4 BU 0 1 0 1 0 1
#5 WG 0 0 1 0 1 0
#6 OX 0 1 1 0 0 1
#7 SR 1 0 1 1 1 1
#8 YV 0 0 1 1 0 1
#9 IN 1 1 0 0 0 0
#10 LM 1 1 0 1 0 1
#11 QC 0 1 1 1 0 1

如果您有多个非数字列并且需要先找到它们的位置,您可以这样做

numeric_cols <- vapply(df, is.numeric, logical(1))
df[numeric_cols] <- as.integer(df[numeric_cols] != 0)
df

关于替换数据帧的非零值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53097057/

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