我有一个看起来像这样的数据框:
dat <- data.frame(id=1:6,
z_1=c(100,290,38,129,0,290),
z_2=c(20,0,0,0,0,290),
z_3=c(0,0,38,0,0,98),
z_4=c(0,0,38,127,38,78),
z_5=c(23,0,25,0,0,98),
z_6=c(100,0,25,127,0,9))
dat
id z_1 z_2 z_3 z_4 z_5 z_6
1 1 100 20 0 0 23 100
2 2 290 0 0 0 0 0
3 3 38 0 38 38 25 25
4 4 129 0 0 127 0 127
5 5 0 0 0 38 0 0
6 6 290 290 98 78 98 9
我希望能够删除每一行中z_x
的重复值,并用0
或NA
替换任何重复值,但保留原始行和列(即不删除)。这里的0
不算作重复值,它们是缺失值。列内的重复值是可以的。我期望的输出如下:
id z_1 z_2 z_3 z_4 z_5 z_6
1 1 100 20 0 0 23 0
2 2 290 0 0 0 0 0
3 3 38 0 0 0 25 0
4 4 129 0 0 127 0 0
5 5 0 0 0 38 0 0
6 6 290 0 98 78 0 9
我并不关心在 z_x
中值的顺序,所以如果它们被移动了也没关系。有没有一种有效的方法来实现这一点,最好是使用 tidyverse 的某种方式?我知道我可以把数据长表格化并删除重复行,但我的数据集非常大,我正在寻找一种无需长表格化就能完成的方法。