标签: missing-data

计算不包含“ NA”的数据帧的行

可能重复:
R-删除data.frame中具有NA的行

我有一个从以下函数派生的数据框:

complete <- function(directory,id = 1:332) {

   csvfiles <- sprintf("/Users/myname/Desktop/%s/%03d.csv", directory, id)

   nrows <- sapply( csvfiles, function(f) nrow(read.csv(f)))

        rowlabels <- nrow(nrows)

        data.frame(id=sprintf('%3d', id), 
            nobs=sapply(csvfiles,function(x) length(count.fields(x))),
            row.names=rowlabels
           )
       }
Run Code Online (Sandbox Code Playgroud)

此函数计算对象csvfiles生成的目录中包含的每个文件中的行数。然后,它输出一个显示文件号以及行数(因此为两列)的数据帧

以为我有它,但是问题是我现在必须在NA存在实例的每个文件中排除行。

我将如何编辑它以忽略每个文件中的那些行,而仅计算不NA存在的行?

r missing-data dataframe

4
推荐指数
1
解决办法
4万
查看次数

在特征向量中计算多个缺失值

编辑过的帖子

这是原帖的简短版本.

  1. 我们有一个训练数据集(一些特征显着相关).特征空间有20个维度(全部是连续的).
  2. 我们需要使用训练数据训练非参数(大多数特征形成非线性子空间,我们不能假设其中任何一个的分布)imputer(kNN或基于树的回归).
  3. 我们需要使用训练过的计算机预测查询数据中的多个缺失值(查询特征向量最多可以有13个缺失的特征,因此计算机应该处理缺失特征的任何组合).注:该imputer不应该在任何重新训练方式/安装使用查询数据(就像是在目前为止,我发现所有的主流R封装完成的:Amelia,impute,mi和mice...).这就是归因应该完全基于训练数据.
  4. 所有这些的目的描述如下.
  5. 下面是一个小数据样本.

原帖(TL; DR)

简而言之,我有一些复杂的数据可以做.我们有一个~100k 20D样本的训练数据集和一个较小的测试数据集.每个要素/维度都是连续变量,但比例不同.有两个不同的类.两个数据集都是非常NA膨胀的(NAs在维度上不是均匀分布的).我sklearn.ensemble.ExtraTreesClassifier用于分类,虽然树集合可以处理丢失的数据案例,但有三个理由可以进行估算

  1. 通过这种方式,我们可以在查询数据集的分类过程中从森林中的所有树获得投票(而不仅仅是那些没有缺失特征/功能的投票).
  2. 我们在培训期间不会丢失数据.
  3. scikit树集合(都ExtraTrees和RandomForest)的实现不处理缺失值.但这一点并不重要.如果它不是前两个我会使用rpy2+一些不错的R实现.

训练数据集的情况非常简单,因为我可以应用特定于类的中位插补策略​​来处理缺失值,这种方法到目前为止一直运行良好.显然,这种方法不能应用于查询 - 我们没有开始的类.由于我们知道类可能在查询中具有显着不同的份额,因此我们无法应用类无关紧要的方法,因为这可能会引入偏差并降低分类性能,因此我们需要从模型中计算缺失值.

由于以下几个原因,线性模型不是一种选择:

  1. 所有特征都在某种程度上相关;
  2. 从理论上讲,我们可以在样本特征向量中获得所有可能的缺失特征组合,即使我们的工具需要至少7个非缺失特征,我们最终得到~1 ^ E6可能的模型,如果你问的话,这看起来不是很优雅我.

基于树的回归模型出于同样的原因并不好.因此我们最终选择kNN(k个最近邻居),球树或具有半径阈值的LSH更具体.这种方法非常适合这项任务,因为维度(ergo距离)是相关的,因此我们在极其NA的情况下获得了良好的性能,但有几个缺点:

  1. 我还没有发现在Python单个实现(包括impute,sklearn.preprocessing.Imputer,orange),处理功能的载体配合多套不同缺失值的,这是我们希望有一个只为缺失的功能所有可能的组合imputer.
  2. kNN使用成对点距离进行预测/插补.正如我已经提到的,我们的变量具有不同的尺度,因此在距离估计之前必须对特征空间进行归一化.我们需要知道每个维度的理论最大/最小值才能正确地进行缩放.这不是一个问题,因为这是一个建筑简单的问题(用户必须提供最小/最大值的向量).

以下是我想听到您的意见:

  1. 有没有经典的方法来解决上面列表中给出的与kNN相关的问题?我相信这一定是一个常见的案例,但我没有在网上找到任何具体内容.
  2. 在我们的案例中是否有更好的方法来估算数据?你会推荐什么?请提供Python实现(R和C/C++也被考虑).

数据

以下是训练数据集的一小部分示例.我减少了功能的数量,使其更具可读性.查询数据具有相同的结构,除了明显缺少category信息.

v1  v2  v3  v4  v5  category
0.40524 0.71542 NA  0.81033 0.8209  1
0.78421 0.76378 0.84324 0.58814 0.9348  2
0.30055 NA  0.84324 NA  0.60003 …
Run Code Online (Sandbox Code Playgroud)

python r machine-learning missing-data

4
推荐指数
1
解决办法
4169
查看次数

通过指数填写R中的大量NA数据?

我根据三件事索引价格数据:

状态,日期和UPC(即产品代码).

我有一堆NA的价格.

我试图通过以下方式填充NA:对于具有索引(S,D,UPC)的给定缺失价格,使用相同的S和UPC填写所有数据点的平均价格.即,取平均日期.

必须有一种非常简单的方法来做到这一点,因为这非常简单.我一直在使用for循环,但我现在意识到这是非常低效的,我想使用一个函数,比如plyr或dplyr中的函数,它将尽可能少地完成所有操作.

upc=c(1153801013,1153801013,1153801013,1153801013,1153801013,1153801013,2105900750,2105900750,2105900750,2105900750,2105900750,2173300001,2173300001,2173300001,2173300001)
date=c(200601,200602,200603,200604,200601,200602,200601,200602,200603,200601,200602,200603,200604,200605,200606)
price=c(26,28,NA,NA,23,24,85,84,NA,81,78,24,19,98,NA)
state=c(1,1,1,1,2,2,1,1,2,2,2,1,1,1,1)

# This is what I have:
data <- data.frame(upc,date,state,price)

# This is what I want:
price=c(26,28,27,27,23,24,85,84,79.5,81,78,24,19,98,47)
data2 <- data.frame(upc,date,state,price)
Run Code Online (Sandbox Code Playgroud)

有什么建议?谢谢.

r missing-data na

4
推荐指数
2
解决办法
70
查看次数

删除前导和尾随 NA

我需要从向量中删除前导和尾随缺失值 ( NA)。NA应保留数字之间的 s。请注意,我的下一步是索引另一个向量,NA并且只保留与第一个向量中位置相同的值。这是示例:

a <- c(NA, NA, NA, NA, NA, 5,2,3,1,2,1,5,2, NA, NA, 2,3,2,NA,NA,NA)
b <- sample(1:21)
Run Code Online (Sandbox Code Playgroud)

我想要的输出是:

a1 <- c(5,2,3,1,2,1,5,2,NA,NA,2,3,2)
# leading and trailing NAs removed

b1 <- b[6:18]
# subset with the indices kept in "a" above.
Run Code Online (Sandbox Code Playgroud)

我想我可以用条件循环来做到这一点,但我想对它进行矢量化。谢谢你的帮助!

r subset missing-data na

4
推荐指数
3
解决办法
497
查看次数

在 Y 中丢失数据的回归后预测.lm

predict.lm当因变量 Y 的某些值丢失时,我不明白如何使用该命令从线性回归生成预测值,即使没有独立的 X 观测值丢失。从代数上讲,这不是问题,但我不知道在 R 中执行此操作的有效方法。以这个假数据框和回归模型为例。我尝试在源数据框中分配预测,但由于缺少一个 Y 值而无法这样做:我收到错误消息。

# Create a fake dataframe
x <- c(1,2,3,4,5,6,7,8,9,10)
y <- c(100,200,300,400,NA,600,700,800,900,100)
df <- as.data.frame(cbind(x,y))

# Regress X and Y
model<-lm(y~x+1)
summary(model)

# Attempt to generate predictions in source dataframe but am unable to.
df$y_ip<-predict.lm(testy)

Error in `$<-.data.frame`(`*tmp*`, y_ip, value = c(221.............
  replacement has 9 rows, data has 10
Run Code Online (Sandbox Code Playgroud)

我通过使用代数df$y<-B0+ B1*df$x生成预测或通过调用模型的系数生成预测来解决这个问题df$y<-((summary(model)$coefficients[1, 1]) + (summary(model)$coefficients[2, 1]*(df$x));但是,我现在正在使用具有数百个系数的大数据模型,这些方法不再实用。我想知道如何使用该predict功能来做到这一点。

预先感谢您的帮助!

r predict missing-data lm

4
推荐指数
1
解决办法
3424
查看次数

有条件地使用replace_na

我希望有条件地使用tidyverse取代截至2017年7月16日的缺失收入.

我的数据

library(tidyverse)
library(lubridate)

    df<- tribble(
                 ~Date, ~Revenue,
          "2017-07-01",      500,
          "2017-07-02",      501,
          "2017-07-03",      502,
          "2017-07-04",      503,
          "2017-07-05",      504,
          "2017-07-06",      505,
          "2017-07-07",      506,
          "2017-07-08",      507,
          "2017-07-09",      508,
          "2017-07-10",      509,
          "2017-07-11",      510,
          "2017-07-12",      NA,
          "2017-07-13",      NA,
          "2017-07-14",      NA,
          "2017-07-15",      NA,
          "2017-07-16",      NA,
          "2017-07-17",      NA,
          "2017-07-18",      NA,
          "2017-07-19",      NA,
          "2017-07-20",      NA
          )

df$Date <- ymd(df$Date)
Run Code Online (Sandbox Code Playgroud)

我想要有条件地替换NA的日期

max.date <- ymd("2017-07-16")
Run Code Online (Sandbox Code Playgroud)

输出我想要的

    # A tibble: 20 × 2
             Date Revenue
            <chr>   <dbl>
    1  2017-07-01     500
    2  2017-07-02     501
    3  2017-07-03     502
    4  2017-07-04     503
    5 …
Run Code Online (Sandbox Code Playgroud)

r missing-data tidyverse

4
推荐指数
1
解决办法
501
查看次数

用字符串值替换数据帧中的 NaN

我想用“缺失值”替换我的 df 一列中的缺失值。我试过

result['emp_title'].fillna('missing')
Run Code Online (Sandbox Code Playgroud)

或者

result['emp_title'] = result['emp_title'].replace({ np.nan:'missing'})
Run Code Online (Sandbox Code Playgroud)

第二个有效,因为当我计算此代码后的缺失值时:

result['emp_title'].isnull().sum()
Run Code Online (Sandbox Code Playgroud)

它给了我 0。但是,第一个没有按我预期的那样工作,它没有给我 0,而不是之前的缺失值计数。为什么第一个不起作用?谢谢!

python replace missing-data dataframe pandas

4
推荐指数
1
解决办法
9125
查看次数

使用jq计算缺少键的记录

以下是调用API时返回的示例输出:

curl "https://mywebsite.com/api/cars.json&page=1" |  jq '.' 
Run Code Online (Sandbox Code Playgroud)

使用jq,将如何计算数字或记录charge缺少密钥的位置?我知道代码的第一位将包括在内,jq '. | length'但是如何过滤掉包含或不包含某个键值的对象?

如果应用于以下示例,则输出为 1

{
  "current_page": 1,
  "items": [
    {
      "id": 1,
      "name": "vehicleA",
      "state": "available",
      "charge": 100
    },
    {
      "id": 2,
      "name": "vehicleB",
      "state": "available",
    },
    {
      "id": 3,
      "name": "vehicleB",
      "state": "available",
      "charge": 50
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

bash json count missing-data jq

4
推荐指数
1
解决办法
1554
查看次数

通过使用 data.table 在每个组中向前滚动来填充缺失值

我的目标是通过向前滚动来按组填充缺失值。

虚拟数据

library(data.table)

DT <- structure(list(CLASS = c("A", "A", "A", "A", "A", "A", "B", "B","B"),
VAL = c(NA, 1, NA, NA, 2, NA, 50, NA, 100)),
.Names = c("CLASS", "VAL"),
row.names = c(NA, -9L), class = c("data.table", "data.frame"))

> DT
   CLASS VAL
1:     A  NA
2:     A   1
3:     A  NA
4:     A  NA
5:     A   2
6:     A  NA
7:     B  50
8:     B  NA
9:     B 100
Run Code Online (Sandbox Code Playgroud)

想要的结果

   CLASS VAL
1:     A  NA
2:     A   1
3:     A …
Run Code Online (Sandbox Code Playgroud)

r missing-data data.table

4
推荐指数
1
解决办法
1403
查看次数

如何将值更改为缺失

我似乎无法在Julia版本0.6.4中将值更改为缺失(我相信它在0.6之前被允许).

示例代码:

using Dataframes
x = zeros(5)
5-element Array{Float64,1}:
 0.0
 0.0
 0.0
 0.0
 0.0
x[3] = missing
ERROR: MethodError: Cannot `convert` an object of type Missings.Missing to an     
object of type Float64
This may have arisen from a call to the constructor Float64(...),
since type constructors fall back to convert methods.
Stacktrace:
[1] setindex!(::Array{Float64,1}, ::Missings.Missing, ::Int64) at ./array.jl:583
Run Code Online (Sandbox Code Playgroud)

在此设置中,我尝试将某些指标编码为分析的缺失值.有一个简单的解决方法吗?

missing-data julia

4
推荐指数
1
解决办法
384
查看次数

标签 统计

missing-data ×10

r ×7

dataframe ×2

na ×2

python ×2

bash ×1

count ×1

data.table ×1

jq ×1

json ×1

julia ×1

lm ×1

machine-learning ×1

pandas ×1

predict ×1

replace ×1

subset ×1

tidyverse ×1