我需要将有效值移到每个id
内 Dataframe 的顶部。
df <- data.frame(id = c(1,1,1,2,2,2,3,3,3,3),
itemid = c(1,2,3,1,2,3,1,2,3,4),
values = c(1,NA,0,NA,NA,0,1,NA,0,NA))
df
id itemid values
1 1 1 1
2 1 2 NA
3 1 3 0
4 2 1 NA
5 2 2 NA
6 2 3 0
7 3 1 1
8 3 2 NA
9 3 3 0
10 3 4 NA
不包括id列,当values
列中缺少一个值时,我希望将每个id
的所有值向顶部对齐。
如何获得下面的所需数据集?
df1
id itemid values
1 1 1 1
2 1 2 0
3 1 3 NA
4 2 1 0
5 2 2 NA
6 2 3 NA
7 3 1 1
8 3 2 0
9 3 3 NA
10 3 4 NA
4条答案
按热度按时间2j4z5cfb1#
使用
tidyverse
,您可以通过values
是否缺失来确定arrange
(这将把它们放在底部)。输出
或者,如果希望
itemid
和其他列保持相同的顺序,可以使用mutate
对感兴趣的列进行特定排序(如values
)。其他答案提供了很好的解决方案,如@圣地亚哥和@ThomasIsCoding。如果有多个感兴趣的列要将NA
移到每组的底部,还可以尝试:其中.cols参数将包含要独立转换和重新排序的列。
输出
vwkv1x7d2#
我们可以试试
ave
+order
cuxqih213#
使用
data.table
:7bsow1i64#
我会定义一个函数来完成您想要的任务,然后按
id
分组:(This方法会保留
itemid
的顺序)。或者基于ThomasIsCoding的答案: