R 替换数据帧的非零值

R 替换数据帧的非零值,r,dataframe,R,Dataframe,我有一个数据框,看起来像下面的示例数据 > 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, 1

我有一个数据框,看起来像下面的示例数据

> 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替换所有非零值。我可以用两种方法来做到这一点

  • 一次使用一列替换,如下所示。那我每次都得换列名

    df$Requirement[df$Requirement!=0]您可以

    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
    
    df[-1]
    df1[-1]=1
    获取
    TRUE
    (1)
  • +
    前面加上前缀将类型转换为整数

  • 只是先前答案的补充

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

    df[-1]
    df[df!=0]@sotos,感谢您花时间调查此事。你的建议很好,但它将所有其他非数字列变成了
    NA
    。除了从原始df复制相应的列之外,我还需要做其他任何处理吗?哇,真不敢相信只有一行代码就解决了我的问题。它为我创造了奇迹。非常感谢。很好的解决方案。感谢您的时间和解决方案。
    numeric_cols <- vapply(df, is.numeric, logical(1))
    df[numeric_cols] <- as.integer(df[numeric_cols] != 0)
    df
    
    df1[-1] <- + sapply(df1[-1], as.logical)
    
    #   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.numeric(df[-1] != 0)
    df[-1] <- as.numeric(df[-1] != 0, as.logical)
    df[-1] <- as.numeric(as.logical(df[-1] != 0))