按因子列对data.frame group内的变量进行插补

按因子列对data.frame group内的变量进行插补,r,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 我想用零件的平均

我有一个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部分,我想用a部分中id 1-4的平均值来插补id 5缺失值,对于b部分,用b部分中id的平均值来插补缺失的id3,等等


我需要跨多个列执行此操作(想象有更多的值列)。因此,也许可以使用函数等的apply。

使用
read.table/read.csv
中的
na.strings
参数,我们可以将缺少的值转换为real
na
,从而将“value”列读取为“numeric”。使用
dplyr
,我们可以将多值列中的
NAs
更改为该列的
mean

library(dplyr)
df1 %>%
    group_by(part) %>%
    mutate_each(funs(replace(., which(is.na(.)), mean(., na.rm=TRUE))), 
       starts_with('value'))
或具有
数据的类似选项。表

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]
库(data.table)

NM1可以避免使用“<代码> NA”。字符串=“NA”/代码>在Read .Tabel/Read .cvScript中,考虑MISSREST包。谢谢。如果值列(其中有很多)有不同的名称-如何处理?COL3=值,但COL4= NExtValue,col5=adiffvalue等…@PaulBeales这不是问题。您可以使用
删除
start\u,并使用
col3:col5
中描述的某些方法选择
columns@PaulBeales我认为列名是
col3
col4
等等。在您的例子中,它应该是
包含('value')
以('value'结尾)
谢谢……这是我需要的……感谢您-勾选标记。。!
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)