我有一个data.frame,主要是NA值和一些数据。要清理它,我需要选择并复制所有NA值(不是包括NA的行或列,而只是值)。这似乎是一项简单的任务,但到目前为止我没有尝试过任何解决方案。我想明确表示我不想在结果变量/文件中保持行数完整,而是逐个逐列删除所有NA值。好像这些列中的单个列表和我将所有单元格排序到顶部,其中包含信息/值,所有单元格都是NA到底部。
谢谢。
更新示例:
# Load the regressor
if isinstance(regressor, XGBRegressor):
regressor = XGBRegressor()
r = pickle.load(open(fname, "rb" ))
print r.get_xgb_params()
regressor._Booster = r._Booster
regressor.set_params(**r.get_xgb_params())
# Do the prediction
y_predict = regressor.predict(X_test)
期望的结果:
Col 1 Col 2 Col 3
Bar NA But
NA There NA
Foo NA NA
NA NA Not
NA NA NA
Here NA NA
NA Better NA
我需要保持列完整,但在列中所有值都应该向上移动。因此,如果我可以选择所有非NA值并将它们粘贴到新的数据帧(或其他任何内容)中,那么它包含相同数量的列但只包含值,而不是NAs。
希望能让它更清晰。谢谢。
答案 0 :(得分:3)
如果我理解正确,这就是您想要的:
# sample data
df = data.frame(a=c(1,NA,2),b=c(NA,NA,4))
df2 = lapply(df, function(x) {x[!is.na(x)]})
df3 = sapply(df2, '[', seq(max(sapply(df2,length))))
输入:
a b
1 1 NA
2 NA NA
3 2 4
输出1,作为列表列表:
> df2
$a
[1] 1 2
$b
[1] 4
输出2,作为数据帧:
> df3
a b
[1,] 1 4
[2,] 2 NA
希望这有帮助!