如何删除空单元格并减少列数

时间:2018-08-16 21:37:49

标签: r dplyr

我有一张桌子,看起来像这样:

| variable | observer1 | observer2 | observer3 | final | 
| -------- | --------- | --------- | --------- | ----- |
| case1    |           |           |           |       |
| var1     | 1         | 1         |           |       |
| var2     | 3         | 3         |           |       |
| var3     | 4         | 5         |           | 5     |
| case2    |           |           |           |       |
| var1     | 2         |           | 2         |       |
| var2     | 5         |           | 5         |       |
| var3     | 1         |           | 1         |       |
| case3    |           |           |           |       |
| var1     |           | 2         | 3         | 2     |
| var2     |           | 2         | 2         |       |
| var3     |           | 1         | 1         |       |
| case4    |           |           |           |       |
| var1     | 1         |           | 1         |       |
| var2     | 5         |           | 5         |       |
| var3     | 3         |           | 3         |       |

三个观察者专栏,但只填补了两个。 首先,我想计算IRR,因此我需要一个有两列且没有空单元格的表:

| variable | observer1 | observer2 |
| -------- | --------- | --------- |
| case1    |           |           |
| var1     | 1         | 1         |
| var2     | 3         | 3         |
| var3     | 4         | 5         |
| case2    |           |           |
| var1     | 2         | 2         |
| var2     | 5         | 5         |
| var3     | 1         | 1         |
| case3    |           |           |
| var1     | 2         | 3         |
| var2     | 2         | 2         |
| var3     | 1         | 1         |
| case4    |           |           |
| var1     | 1         | 1         |
| var2     | 5         | 5         |
| var3     | 3         | 3         |

我尝试使用tidyverse软件包,但不确定。一些“ ifelse()”魔术可能更容易。 是否有一种干净便捷的方法来执行这样的事情?有人可以指出我要使用的正确功能吗?还是只针对要在stackoverflow上搜索的关键字?我发现了很多删除整个空列或行的方法。

编辑:我删除了原始数据的链接。没必要。感谢Lamia的工作答复。

1 个答案:

答案 0 :(得分:0)

在您的3列UNAME AGR_NAME CHILD_AGR nik abc x nik abc y observer1observer2中,有时您有2个非observer3值,1个非NA值或3个NA值。 如果要合并3列,可以执行以下操作:

NA

如果有2,则res = data.frame(df$coding,t(apply(df[paste0("observer",1:3)],1,function(x) x[!is.na(x)][1:2]))) 函数将为每行返回2个非apply值,如果只有2个,则返回1个非NA值一个值,如果该行中没有数据,则返回两个NA。 然后,我们将此结果放入第一列(NA)的数据框中。