我是新用户,我更习惯于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中做到这一点。有人能指出我正确的方向吗?
答案 0 :(得分:0)
我们可以gather
将数据{长}'格式,在通过' test',' tester',filter
进行分组后,只有any
" Y"在' Val'专栏,ungroup
,mutate
'测试员'通过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