r - 如何删除空单元格并减少列
问题描述
我有一张桌子,大致如下:
| 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 的工作回答。
解决方案
在您的 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])))
如果有 2 个,该apply
函数将为每一行返回 2个非值,如果只有一个值,则返回一个非值和一个,如果行中没有数据,则返回两个 s。然后,我们将此结果放入具有第一列 ( ) 的数据框中。NA
NA
NA
NA
coding
推荐阅读
- c# - 使用存储过程在 ORACLE 中插入带数组的参数
- android - 分支IO 华为集成
- c# - Kafka消费者休息Api
- github - 即使添加了访问令牌,也无法从 IntelliJ 推送到 Github
- c# - 进入游戏时调用 OnApplicationFocus 和 OnApplicationPause
- gradle - 类型 'org.sonarqube.gradle.SonarQubeTask' 属性 'pluginVersion' 是私有的,并带有 @Internal 注释
- opencv - 使用 tflite 进行自定义对象检测
- wordpress - Wordpress 以编程方式为用户创建应用程序密码
- angular - Angular Universal Express 服务器显示函数 url 而不是入口 url
- docker - Linux Docker 容器 .Net 5 中的 Windows 身份验证