我有单元格数组,每个单元格包含一个值序列作为行向量.序列包含一些由表示的缺失值NaN.
我想用某种插值方法替换所有的NaN,我怎样才能在MATLAB中做到这一点?我也对如何处理这些缺失值的其他建议持开放态度.
请考虑此示例数据来说明问题:
seq = {randn(1,10); randn(1,7); randn(1,8)};
for i=1:numel(seq)
%# simulate some missing values
ind = rand( size(seq{i}) ) < 0.2;
seq{i}(ind) = nan;
end
Run Code Online (Sandbox Code Playgroud)
结果序列:
seq{1}
ans =
-0.50782 -0.32058 NaN -3.0292 -0.45701 1.2424 NaN 0.93373 NaN -0.029006
seq{2}
ans =
0.18245 -1.5651 -0.084539 1.6039 0.098348 0.041374 -0.73417
seq{3}
ans =
NaN NaN 0.42639 -0.37281 -0.23645 2.0237 -2.2584 2.2294
Run Code Online (Sandbox Code Playgroud)
编辑:
根据回复,我认为存在一个混乱:显然我不使用随机数据,上面显示的代码只是数据结构的一个例子.
实际数据是某种形式的处理信号.问题是在分析过程中,如果序列包含缺失值,我的解决方案将会失败,因此需要进行过滤/插值(我已经考虑过使用每个序列的平均值来填充空白,但我希望有更强大的功能)
在R中,该na.omit()函数可用于丢弃包含NA值的data.frame中的条目.作为副作用,如果确实丢弃了行,则该函数向结果添加属性"省略",该结果包含被丢弃的row.names的向量.
我想丢弃这个'省略'属性,因为我不需要它.最好的方法是什么?
出于某种原因,当我指定glms(并且lm也是如此)时,R不会预测数据的缺失值.这是一个例子:
y = round(runif(50))
y = c(y,rep(NA,50))
x = rnorm(100)
m = glm(y~x, family=binomial(link="logit"))
p = predict(m,na.action=na.pass)
length(p)
y = round(runif(50))
y = c(y,rep(NA,50))
x = rnorm(100)
m = lm(y~x)
p = predict(m)
length(p)
Run Code Online (Sandbox Code Playgroud)
p的长度应该是100,但是它的50.奇怪的是,我在同一个脚本中有其他预测可以预测丢失的数据.
编辑:事实证明,那些其他预测是非常错误的 - 我正在做imputed.value = rnorm(N,mean.from.predict,var.of.prediction.interval).这回收了来自lm预测或glm预测函数的均值和sd向量length(predict)<N,这与我所寻求的完全不同.
所以我的问题是我的示例代码是什么阻止glm和lm预测缺失值?
谢谢!
使用R,我想有效地识别序列中缺少哪些值.我已经写下了我如何做的下面的例子.肯定有更好的办法.有人可以帮忙吗?
data.list=c(1,2,4,5,7,8,9)
full.list=seq(from = 1, to = 10, by =1)
output <- c()
for(i in 1:length(full.list)){
holder1 <- as.numeric(any(data.list == i))
output[i] <- holder1
}
which(output == 0)
Run Code Online (Sandbox Code Playgroud) 我有一个data.table,有大量的缺失值.我想通过在data.table中的可用值中添加或减去值来填充这些值.特别要考虑这些数据:
> test = data.table(id=c("A","A","A","A","A","B","B","B","B","B"), x=c(NA,NA,0,NA,NA,NA,NA,0,NA,NA))
> test
id x
1: A NA
2: A NA
3: A 0
4: A NA
5: A NA
6: B NA
7: B NA
8: B 0
9: B NA
10: B NA
Run Code Online (Sandbox Code Playgroud)
我需要一个操作,将其转换为:
id x
1: A -2
2: A -1
3: A 0
4: A 1
5: A 2
6: B -2
7: B -1
8: B 0
9: B 1
10: B 2
Run Code Online (Sandbox Code Playgroud)
基本上是na.locf的一个版本,它增加最后一个值而不是重复它.
我有一个数据框,其中包含每月数据的时间序列,其中包含一些缺失值.
dates <- seq(
as.Date("2010-01-01"), as.Date("2017-12-01"), "1 month"
)
n_dates <- length(dates)
dates <- dates[runif(n_dates) < 0.5]
time_data <- data.frame(
date = dates,
value = rnorm(length(dates))
)
## date value
## 1 2010-02-01 1.3625419
## 2 2010-06-01 0.1512481
## etc.
Run Code Online (Sandbox Code Playgroud)
为了能够利用时间序列预测功能,例如forecast,我想将其转换为ts对象.
这样做的愚蠢方法是在整个时间段内创建一组常规的月度日期,然后将联接返回到原始数据.
library(dplyr)
first_date <- min(time_data$date)
last_date <- max(time_data$date)
full_dates <- data.frame(
date = seq(first_date, last_date, "1 month")
)
extended_time_data <- left_join(full_dates, time_data, by = "date")
## date value
## 1 2010-02-01 1.3625419
## 2 2010-03-01 …Run Code Online (Sandbox Code Playgroud) 考虑data下面包含一些 nan :
Column-1 Column-2 Column-3 Column-4 Column-5
0 NaN 15.0 63.0 8.0 40.0
1 60.0 51.0 NaN 54.0 31.0
2 15.0 17.0 55.0 80.0 NaN
3 54.0 43.0 70.0 16.0 73.0
4 94.0 31.0 94.0 29.0 53.0
5 99.0 52.0 77.0 91.0 58.0
6 84.0 19.0 36.0 NaN 97.0
7 41.0 91.0 62.0 67.0 68.0
8 44.0 38.0 27.0 53.0 37.0
9 58.0 NaN 63.0 57.0 28.0
10 66.0 68.0 89.0 36.0 47.0
11 7.0 81.0 5.0 …Run Code Online (Sandbox Code Playgroud) pandas.Series.map 的Pandas 文档 说:
“当arg是字典时,Series中不在字典中的值(作为键)将转换为NaN。但是,如果字典是定义missing的dict子类(即提供默认值的方法),则此默认值使用而不是 NaN。”
你实际上是如何做到的?我无法让它工作..
class MyDict(collections.UserDict):
def __missing__(self):
return "_Unknown"
d = MyDict({k: v for k, v in my_list})
df.col1.map(d)
Run Code Online (Sandbox Code Playgroud) 在将 CSV 数据导入到 Pandas DataFrame 时,我还没有找到令人满意的解决方案来解决丢失数据的问题。
我有数据集,我事先不知道列或数据类型是什么。我希望大熊猫在推断如何读取数据方面做得更好。
我还没有发现任何na_values=...真正有帮助的组合。
考虑以下 csv 文件:
no_holes.csv
letter,number
a,1
b,2
c,3
d,4
Run Code Online (Sandbox Code Playgroud)
with_holes.csv
letter,number
a,1
,2
b,
,4
Run Code Online (Sandbox Code Playgroud)
empty_column.csv
letters,numbers
,1
,2
,3
,4
Run Code Online (Sandbox Code Playgroud)
with_NA.csv
letter,number
a,1
b,NA
NA,3
d,4
Run Code Online (Sandbox Code Playgroud)
这是我将它们读入 DataFrame 时发生的情况(下面的代码):
**no holes**
letter number
0 a 1
1 b 2
2 c 3
3 d 4
letter object
number int64
dtype: object
**with holes**
letter number
0 a 1
1 NaN 2
2 b
3 NaN 4
letter …Run Code Online (Sandbox Code Playgroud) 我必须更换价值吗?使用 NaN 以便您可以调用 .isnull () 方法。我找到了几种解决方案,但总是返回一些错误。认为:
data = pd.DataFrame([[1,?,5],[?,?,4],[?,32.1,1]])
Run Code Online (Sandbox Code Playgroud)
如果我尝试:
pd.data.replace('?', np.nan)
Run Code Online (Sandbox Code Playgroud)
我有:
0 1 2
0 1.0 NaN 5
1 NaN NaN 4
2 NaN 32.1 1
Run Code Online (Sandbox Code Playgroud)
但 data.isnull() 返回:
0 1 2
0 False False False
1 False False False
2 False False False
Run Code Online (Sandbox Code Playgroud)
为什么?
missing-data ×10
r ×5
pandas ×3
python ×3
dataframe ×2
nan ×2
time-series ×2
data.table ×1
dictionary ×1
glm ×1
imputation ×1
lm ×1
matlab ×1
na ×1
prediction ×1
scikit-learn ×1