我有一张表,大致看起来像这样:
| 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的工作回答。
发布于 2018-08-17 09:48:22
在3列observer1
、observer2
和observer3
中,有时会有2个非NA
值、1个非NA
值或3个NA
值。如果要合并3列,可以执行以下操作:
res = data.frame(df$coding,t(apply(df[paste0("observer",1:3)],1,function(x) x[!is.na(x)][1:2])))
apply
函数将为每行返回2个非NA
值,如果有2个,则返回一个非NA
值;如果只有一个值,则返回一个NA
;如果行中没有数据,则返回两个NA
。然后,我们将此结果放入第一列(coding
)的数据帧中。
https://stackoverflow.com/questions/51885664
复制相似问题