如何转置某些数据

时间:2016-09-11 16:06:40

标签: r

我是新用户,我更习惯于SAS。

我有一个数据集:

 test| tester |obs1| obs2
  test1|1     | Y   |Y
  test1|2     |Y    |N
  test2 |1    |Y    |Y
  test2 |2    | Y   |Y
  test3 |2     |N   |N

我想1)只保留两个测试人员都参加测试的测试 和2)转换数据,使它看起来像这样:

 test|  obs1_tester1 | obs1_tester_2| obs2_tester1 | obs2_tester2
 test1|    Y          | Y            | Y            | N
 test2|   Y           | Y            |Y             |Y
 test4.....

我知道在SAS中我可以创建一个变量,计算每次测试的次数,然后删除任何观察,其中测试的最大次数小于2.然后使用转置函数轻松转置数据集。

我真的不明白如何在R中做到这一点。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

我们可以gather将数据{长}'格式,在通过' test',' tester',filter进行分组后,只有any" Y"在' Val'专栏,ungroupmutate'测试员'通过paste前缀' tester' (如果需要),unite列(' Var',' tester')到一个列(' varTest')和{{1}广泛的'格式。

spread

数据

library(tidyr)
library(dplyr)
gather(df1, Var, Val, obs1:obs2) %>%
        group_by(test, tester) %>% 
        filter(any(Val=="Y")) %>% 
        ungroup() %>%
        mutate(tester = paste0("tester", tester)) %>% 
        unite(VarTest, Var, tester) %>% 
        spread(VarTest, Val)
#   test obs1_tester1 obs1_tester2 obs2_tester1 obs2_tester2
#  <chr>        <chr>        <chr>        <chr>        <chr>
#1 test1            Y            Y            Y            N
#2 test2            Y            Y            Y            Y