我有一个数据集,我想用最接近的非缺失值来填充缺失值。我在this问题的答案中找到了两种优雅的解决方案,但我不明白为什么它们对我不起作用。
表格:
input.txt
尝试#1:
'use strict';
import React, { Component } from "react";
import { Text, View, TextInput, StyleSheet } from 'react-native';
class Home extends Component {
constructor(props) {
super(props);
this.state = {
name:''
email:''
nameError:''
emailError:''
};
}
onChangeText = name => text => this.setState({ [name]: text });
render() {
let { name, email, nameError, emailError } = this.state;
return (
<View style={styles.container}>
<TextInput onChangeText={this._onChangeText("name")} value={name} />
<Text style={styles.text}>{nameError}</Text>
<TextInput onChangeText={this._onChangeText("email"} value={email} />
<Text style={styles.text}>{emailError}</Text>
</View>
)
}
}
const styles = StyleSheet.create({
text: {
padding: 10,
fontSize: 42
},
container: {
padding: 10
}
});
export default Home;
尝试#2:
create table Tab1(data date, V1 number);
insert into Tab1 values (date '2000-01-01', 1);
insert into Tab1 values (date '2000-02-01', 1);
insert into Tab1 values (date '2000-03-01', 1);
insert into Tab1 values (date '2000-04-01', 1);
insert into Tab1 values (date '2000-05-01', NULL);
insert into Tab1 values (date '2000-06-01', NULL);
insert into Tab1 values (date '2000-03-01', 2);
insert into Tab1 values (date '2000-04-01', 2);
insert into Tab1 values (date '2000-05-01', NULL);
insert into Tab1 values (date '2000-06-01', NULL);
select * from Tab1;
DATA V1
2000-01-01 1
2000-02-01 1
2000-03-01 1
2000-04-01 1
2000-05-01
2000-06-01
2000-03-01 2
2000-04-01 2
2000-05-01
2000-06-01
两者都会给我同样的不良结果:
select A.*,
(case when V1 is null then lag(V1 ignore nulls)
over (partition by V1 order by V1, data)
else V1
end) V2
from Tab1 A;
我在做什么错了?
答案 0 :(得分:1)
您的第一个版本应该可以工作,但要稍作调整:
select A.*,
coalesce(V1, lag(V1 ignore nulls) over (order by data)) V2
from Tab1 A;
调整是从partition by v1
中删除lag()
。 coalesce()
只是我偏爱简单表达式的地方。
相同的调整也应适用于第二个版本。
您的版本不起作用,因为lag()
值必须来自同一分区(或为null
)。当您拥有partition by v1
时,实际上是在确保v1
与当前行具有相同的值。
答案 1 :(得分:0)
嗨,或者您可以尝试通过参考以下内容手动创建忽略空解决方案。谢谢https://stackoverflow.com/a/57016373/10562099