我试图将一些数据从长格式转换为单行宽格式,下面是我的数据当前的外观;
<template>
<span class="rating">
<template v-for="item in items">
<label class="radio-inline input-star">
<input type="radio" class="input-rating" name="input-rating" v-bind:value="item.value" @click="rate(item.value)">
</label>
</template>
</span>
</template>
<script>
export default{
data(){
return{
items: [
{value: 5},
{value: 4},
{value: 3},
{value: 2},
{value: 1}
]
}
},
methods:{
rate: function (star) {
this.$http.post(window.BaseUrl + '/star', {star: star}).then(function (response) {
console.log('submitted');
});
},
}
}
</script>
以下是我希望我的数据看到最后的结果;
id var1 var2 var3
1 a b c
2 d e f
3 g h i
我已尝试使用id.1 var1.1 var2.1 var3.1 id.2 var1.2 var2.2 var3.2 id.3 var1.3 var2.3 var3.3
1 a b c 2 d e f 3 g h i
软件包和tidyr
但似乎无法满足我的目标。任何帮助将不胜感激。
答案 0 :(得分:1)
如果感兴趣的是维护列类型,可以尝试do.call(cbind, split(mydf, 1:nrow(mydf)))
。
示例:
mydf <- structure(list(id = 1:3, var1 = structure(1:3, .Label = c("a",
"d", "g"), class = "factor"), var2 = c("b", "e", "h"), var3 = c("c",
"f", "i")), .Names = c("id", "var1", "var2", "var3"), row.names = c(NA,
3L), class = "data.frame")
^^这就像你的数据,但&#34; var1&#34;列是一个因素。
do.call(cbind, split(mydf, 1:nrow(mydf)))
# 1.id 1.var1 1.var2 1.var3 2.id 2.var1 2.var2 2.var3 3.id 3.var1 3.var2 3.var3
# 1 1 a b c 2 d e f 3 g h i
str(.Last.value)
# 'data.frame': 1 obs. of 12 variables:
# $ 1.id : int 1
# $ 1.var1: Factor w/ 3 levels "a","d","g": 1
# $ 1.var2: chr "b"
# $ 1.var3: chr "c"
# $ 2.id : int 2
# $ 2.var1: Factor w/ 3 levels "a","d","g": 2
# $ 2.var2: chr "e"
# $ 2.var3: chr "f"
# $ 3.id : int 3
# $ 3.var1: Factor w/ 3 levels "a","d","g": 3
# $ 3.var2: chr "h"
# $ 3.var3: chr "i"
^^请注意保留列类。
一点gsub
可以使列名成为您所期望的。
或者,您可以添加两个附加列,一个填充值&#34; 1&#34;,另一个列的顺序从1到数据集中的行数,并将其用作&#34 ; ID&#34; (LHS)和&#34;时间&#34;带有reshape
函数的(RHS)变量,或类似data.table
dcast
版本的value.var
接受index.html
的多个变量。
答案 1 :(得分:0)
reshape2
包。示例:http://seananderson.ca/2013/10/19/reshape.html