按因子列计算data.frame组中的变量

时间:2015-06-04 07:22:53

标签: r

我有一个data.frame包含数字列,这些列的因子级别我希望通过...来解释缺失的值...让我解释一下。

part   id   value
a      1     23.4
a      2     23.8
a      3     45.6
a      4     34.7
a      5     Na
b      1     45.2
b      2     34.6
b      3     Na
b      4     30.9
b      5     28.1

我想将NA值与零件的平均值相加。所以对于a部分,我想用id部分a中的id 1-4的平均值来表示id 5缺失值,并且对于部分b相同,用b部分中的id的平均值来表示缺少id3。

我需要在许多列中执行此操作(想象有更多的值列)。所以也许应用功能等。

1 个答案:

答案 0 :(得分:1)

na.strings中使用read.table/read.csv参数,我们可以将缺失值转换为实际NA,从而将“值”列读为“数字”。使用dplyr,我们可以使用该列的replace更改多个值列中的NAs mean

library(dplyr)
df1 %>%
    group_by(part) %>%
    mutate_each(funs(replace(., which(is.na(.)), mean(., na.rm=TRUE))), 
       starts_with('value'))

data.table

的类似选项
library(data.table)
nm1 <- grep('value', names(df1))
setDT(df1)[, (nm1) := lapply(.SD,  function(x) replace(x,
     which(is.na(x)), mean(x, na.rm=TRUE))), by = part,.SDcols=nm1]

数据

df1 <- read.table(text="part   id   value
a      1     23.4
a      2     23.8
a      3     45.6
a      4     34.7
a      5     Na
b      1     45.2
b      2     34.6
b      3     Na
b      4     30.9
b      5     28.1", header=TRUE, na.strings="Na", stringsAsFactors=FALSE)