我尝试透视数据集,以便长数据集中的值基于其中一列中的值。下面是数据的示例:
testdf <- data.frame('b'=rep(1:5, each=2), 'x'=rnorm(10, 0),'y'=rnorm(10, c(5,10)),'z'=rnorm(5, c(10,20)),'a'=rep(c(1, 2), 5))
如果我长轴旋转并排除b
,我得到:
testdflong <- tidyr::pivot_longer(testdf, !c(b), names_to='lines', values_to='values')
它为每个a=c(1,2)
重复每个值x,y,z
。我想做的是只根据a
选择z
的值。我知道我可以过滤宽数据,但在真实的用例中a
可能有2个以上的值,z
也是如此,我不想过滤每个'a'上的宽数据。
resultdf <- testdf %>% filter(a==1)
resultdf <- bind_cols(resultdf, testdf %>% filter(a==2) %>% dplyr::select(z))
resultdflong <- tidyr::pivot_longer(resultdf, !c(b), names_to='lines', values_to='values')
但是我想跳过过滤和bind_cols步骤。
3条答案
按热度按时间clj7thdc1#
结果
yvfmudvl2#
我的解决方案比Jon的解决方案稍微瘦一点:
fv2wmkja3#
我们可以将'x','y'中的值替换为
NA
,其中a不等于1,然后利用pivot_longer
中的values_drop_na
删除长格式数据集中的这些行