我在数据框中有三列我想要平均在一起。问题是,在其中一列中,一些空格读为“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
,我会很高兴。
答案 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")]