R - 将NA转换为NaN

时间:2017-11-01 21:46:47

标签: r

我在数据框中有三列我想要平均在一起。问题是,在其中一列中,一些空格读为“NA”。我正在使用的数据集非常大,但我将使用以下示例简化它:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">


    <item
        android:id="@+id/menu_refresh"
        android:icon="@drawable/progress"
        android:title="data Refresh"
        android:visible="false"
        app:showAsAction="always" />

    <item
        android:id="@+id/menu_network_available"
        android:title="@string/network_avalable"
        android:visible="false"
        app:showAsAction="always" />


    <item
        android:id="@+id/menu_network_absent"
        android:title="@string/network_absent"
        android:visible="true"
        app:showAsAction="ifRoom" />


</menu>

我想格式化a <- c(1,2,3,4) b <- c(2,3,4,5) c <- c(3,NA,NA,6) df <- data.frame(a,b,c) df$mean <- (df$a + df$b + df$c)/3 df a b c mean 1 1 2 3 2 2 2 3 NA NA 3 3 4 NA NA 4 4 5 6 5 ,以便将df$c替换为无关紧要的内容,例如NA,或平均操作会忽略的任何其他值在数据框中占有一席之地。如果有另一种方法可以忽略C列中的NaN,我会很高兴。

2 个答案:

答案 0 :(得分:0)

我会说apply代表cols,并指明它应该忽略NA

a <- c(1,2,3,4)
b <- c(2,3,4,5)
c <- c(3,NA,NA,6)
df <- data.frame(a,b,c)
df$mean <- apply(df, 1, mean, na.rm = T)

df现在

a b  c mean
1 2  3  2.0
2 3 NA  2.5
3 4 NA  3.5
4 5  6  5.0

修改要容纳包含列的较大数据集,您可能希望从平均值中排除...

a <- c(1,2,3,4)
b <- c(2,3,4,5)
c <- c(3,NA,NA,6) 
d <- c('excluded', 'from', 'the', 'average')
df <- data.frame(a,b,c,d)

df$mean <- apply(df[, c('a', 'b', 'c')], 1, mean, na.rm = T)

答案 1 :(得分:0)

使用data.table,您也可以尝试

library(data.table)
dt <- as.data.table(df)
dt[, mean := rowMeans(.SD, na.rm = TRUE), .SDcols = c("a", "b", "c")]