列到行以获得整洁的数据结构

时间:2015-08-20 15:12:53

标签: r

我在工作表中做了错误的数据结构。现在我填充了一些字段,并希望以正确的方式重做它。

tenta   uppg    gjord?a     gjord?b gjord?c del
1301    1   0   0   0   1
1301    1   0   0   0   1
1301    2   0   0   0   1
1301    3   0   0   0   1
1301    4   0   0   0   2
1301    5   0   0   0   2
1301    6   0   0   0   2
1303    1   0.1 1   1   1
1303    2   1   0   -   1
1402    6   1   0.1 -   2

我的数据子集,其中del = 1 我想重铸结构
这样我就可以在表格上得到一个整洁的数据集:

tenta   uppg    del gjord?  del 
1303    1   a   0.1 1   
1303    1   b   1   1   
1303    1   c   1   1   
1303    2   a   0   1   
1303    2   b   0   1   
1402    6   0   1   2   

如果那太难了 我很好 为del = 2的子集做新行abc以及 所以我会得到

tenta   uppg    del gjord?  del 
1303    1   a   0.1 1   
1303    1   b   1   1   
1303    1   c   1   1   
1303    2   a   0   1   
1303    2   b   0   1   
1402    6   a   1   2   
1402    6   b   0.1 2   

1 个答案:

答案 0 :(得分:1)

我认为这与您的描述相符,正如我在评论中所说,您的输出与您所说的内容并不匹配:

library(dplyr)
library(tidyr)

dat <- read.table(text="tenta   uppg    gjord?a     gjord?b gjord?c del
1301    1   0   0   0   1
1301    1   0   0   0   1
1301    2   0   0   0   1
1301    3   0   0   0   1
1301    4   0   0   0   2
1301    5   0   0   0   2
1301    6   0   0   0   2
1303    1   0.1 1   1   1
1303    2   1   0   -   1
1402    6   1   0.1 -   2", stringsAsFactors=FALSE, header=TRUE)

dat

##    tenta uppg gjord.a gjord.b gjord.c del
## 1   1301    1     0.0     0.0       0   1
## 2   1301    1     0.0     0.0       0   1
## 3   1301    2     0.0     0.0       0   1
## 4   1301    3     0.0     0.0       0   1
## 5   1301    4     0.0     0.0       0   2
## 6   1301    5     0.0     0.0       0   2
## 7   1301    6     0.0     0.0       0   2
## 8   1303    1     0.1     1.0       1   1
## 9   1303    2     1.0     0.0       -   1
## 10  1402    6     1.0     0.1       -   2

dat %>%
  filter(del==1) %>%
  gather(gjord, val, starts_with("gjord")) %>%
  mutate(gjord=sub("^gjord\\.", "", gjord)) %>%
  distinct()

##    tenta uppg del gjord val
## 1   1301    1   1     a   0
## 2   1301    2   1     a   0
## 3   1301    3   1     a   0
## 4   1303    1   1     a 0.1
## 5   1303    2   1     a   1
## 6   1301    1   1     b   0
## 7   1301    2   1     b   0
## 8   1301    3   1     b   0
## 9   1303    1   1     b   1
## 10  1303    2   1     b   0
## 11  1301    1   1     c   0
## 12  1301    2   1     c   0
## 13  1301    3   1     c   0
## 14  1303    1   1     c   1
## 15  1303    2   1     c   -

我认为你想要不同的行,但如果没有,只需删除distinct