我很难找到重新排列数据集的方法。数据集具有以下形式:
数据
a <- data.frame(Id = c("123Ba", "672Es"),
FirstFlight = c("1999-10-04","1999-10-05"),
EnrollmentMonth = c("1999-10","2000-10"),
Q1_1999 = c(3,0),
Q2_1999 = c(0,1),
Q3_1999 = c(0,1))
# Id FirstFlight EnrollmentMonth Q1_1999 Q2_1999 Q3_1999
#1 123Ba 1999-10-04 1999-10 3 0 0
#2 672Es 1999-10-05 2000-10 0 1 1
变量Id是每个乘客的唯一标识符,后三个变量代表一年的季度(Q1_1999 = 1999年的第一季度)。此季度变量的值表示一个人在相应季度中的航班数量。
我尝试做的是重塑数据集,以便在特定季度乘客每次航班获得一行。因此,对于Quarter变量中的每个条目,应该生成相同数量的行,并且需要添加该季度的新变量,以允许识别该单个航班的季度...我希望它有点清晰现在。
预期输出
b <- data.frame(Id = c("123Ba", "123Ba", "123Ba","672Es","672Es"),
Quarter = c("Q1_1999","Q1_1999","Q1_1999","Q2_1999", "Q3_1999"),
FirstFlight = c("1999-10-04","1999-10-04","1999-10-04","1999-10-05","1999-10-05" ),
EnrollmentMonth = c("1999-10","1999-10","1999-10","2000-10" ,"2000-10"))
# Id Quarter FirstFlight EnrollmentMonth
#1 123Ba Q1_1999 1999-10-04 1999-10
#2 123Ba Q1_1999 1999-10-04 1999-10
#3 123Ba Q1_1999 1999-10-04 1999-10
#4 672Es Q2_1999 1999-10-05 2000-10
#5 672Es Q3_1999 1999-10-05 2000-10
如何重新排列数据以获得此结果?
答案 0 :(得分:1)
var Component = React.createClass({
getInitialState() {
return {
options: [
'Row 1',
'Row 2'
]
};
},
rows: [],
onChange(row) {
this.rows[row].forEach((input) => {
// The values of all inputs in the row that changed
console.log(input.getDOMNode().value);
});
},
renderRows() {
this.rows = [];
return this.state.options.map((opt,i) => {
// Store and cache a new row and store inputs in the
// array using `refs` below.
this.rows.push([]);
return (<tr key={i}>
<td>{opt}</td>
<td>
<input ref={(input) => this.rows[i].push(input)} onChange={this.onChange.bind(this, i)} />
</td>
<td>
<input ref={(input) => this.rows[i].push(input)} onChange={this.onChange.bind(this, i)} />
</td>
</tr>);
});
},
render() {
return (
<table>
{this.renderRows()}
</table>
);
}
});
这样你就可以在每次飞行时都有一行,在col中有季度信息。累积数据acc。到ID,只需对它进行排序。
希望它有所帮助!
答案 1 :(得分:0)
以下是使用splitstackshape
library(splitstackshape)
a$Quarter = apply(a, 1, function(x) toString(rep(names(x[4:6]), x[4:6])))
cSplit(setDT(a), 'Quarter', ',', 'long')[,-(4:6), with = F]
# Id FirstFlight EnrollmentMonth Quarter
#1: 123Ba 1999-10-04 1999-10 Q1_1999
#2: 123Ba 1999-10-04 1999-10 Q1_1999
#3: 123Ba 1999-10-04 1999-10 Q1_1999
#4: 672Es 1999-10-05 2000-10 Q2_1999
#5: 672Es 1999-10-05 2000-10 Q3_1999