【问题标题】:Recode NAs in multiple dataframe columns在多个数据框列中重新编码 NA
【发布时间】:2012-09-07 04:24:54
【问题描述】:

我在一个数据框中有多个整数列,所有的 NA 都需要重新编码为 0。

df1 <- as.data.frame(sapply(paste(sample(letters,50,T),sample(letters,10), sep=""), function(x) {sample(c(NA,0:5),10,T)} ))
df2 <- as.data.frame(sapply(paste(sample(letters,5,T),sample(letters,10,T), sep=""), function(x) {sample(letters[1:5],10,T)} ))
df <- cbind(df2,df1)

产生这样的输出...(仅显示 55 列的前几列)

我可以手动将每列的 NA 重新编码为 0,例如 df$col[is.na(df$col)] &lt;- 0,但考虑到有这么多列,需要一段时间才能全部输入。

如何在一行或三行中将所有这些 NA 重新编码为 0?

(我意识到我可以熔化整数列,然后重新编码一个熔化的列,但我宁愿在基数 R 中这样做)

【问题讨论】:

    标签: r


    【解决方案1】:

    你们很亲密:

    df[is.na(df)] <- 0
    

    【讨论】:

    • 哇.... 简直不敢相信这么容易。然后,我如何指定要重新编码的列范围,而不是所有列?
    • 没关系,我明白了。 df[6:10][is.na(df[6:10])] &lt;- 0。我什至没有想过要连续添加两个方括号。
    • @TommyO'Dell,没问题。就像我说的,你很亲密!
    【解决方案2】:

    使用plyrcolwise 元函数可以轻松完成:

    dfZ=colwise(function(x)ifelse(is.na(x),0,x))(df)
    

    【讨论】:

    • 虽然@mrdwab 的方法确实更短。
    猜你喜欢
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    相关资源
    最近更新 更多