目前我有一个问题如下.在存在每个主题的多个观察的数据集中,我想制作该数据集的子集,其中仅选择记录的最大数据.例如,对于如下数据集:
ID <- c(1,1,1,2,2,2,2,3,3)
Value <- c(2,3,5,2,5,8,17,3,5)
Event <- c(1,1,2,1,2,1,2,2,2)
group <- data.frame(Subject=ID, pt=Value, Event=Event)
Run Code Online (Sandbox Code Playgroud)
对象1,2和3的最大pt值分别为5,17和5.我怎么能首先找到每个主题的最大pt值,然后将这个观察结果放在另一个数据框中?这意味着该子集仅具有每个主题的最大pt值.
几种SQL语言(我主要使用postgreSQL)有一个名为coalesce的函数,它返回每行的第一个非空列元素.当表中包含大量NULL
元素时,这可以非常有效地使用.
我在R中的许多场景中都遇到过这种情况,当处理不太结构化的数据时,其中包含很多NA.
我自己做了一个天真的实现,但它的速度非常慢.
coalesce <- function(...) {
apply(cbind(...), 1, function(x) {
x[which(!is.na(x))[1]]
})
}
Run Code Online (Sandbox Code Playgroud)
a <- c(1, 2, NA, 4, NA)
b <- c(NA, NA, NA, 5, 6)
c <- c(7, 8, NA, 9, 10)
coalesce(a,b,c)
# [1] 1 2 NA 4 6
Run Code Online (Sandbox Code Playgroud)
coalesce
在R中有没有有效的方法?
我有一个简单的数据帧:
ID Col1 Col2 Col3 Col4
1 NA NA NA NA
1 5 10 NA NA
1 NA NA 15 20
2 NA NA NA NA
2 25 30 NA NA
2 NA NA 35 40
Run Code Online (Sandbox Code Playgroud)
我想重新格式化它:
ID Col1 Col2 Col3 Col4
1 5 10 15 20
2 25 30 35 40
Run Code Online (Sandbox Code Playgroud)
(请注意:真实数据集有数千行,而值来自生物数据 - NA
除了NA
s是不相交的,s之后没有简单的模式,是的,每个行正好有3行ID
).
第一步:摆脱只有NA
值的行.
从表面上看,这看起来很简单,但我遇到了一些问题.
complete.cases(DF)
返回all FALSE
,所以我不能真正使用它来删除所有NA
s 的行,如DF[complete.cases(DF),]
.这是因为所有行至少包含一行NA
.
由于NA
s想要传播自己,其他方案使用is.na …
我知道这是一个重复的Q但我似乎无法再找到这个帖子
使用以下数据
df <- data.frame(A=c(1,1,2,2),B=c(NA,2,NA,4),C=c(3,NA,NA,5),D=c(NA,2,3,NA),E=c(5,NA,NA,4))
A B C D E
1 NA 3 NA 5
1 2 NA 2 NA
2 NA NA 3 NA
2 4 5 NA 4
Run Code Online (Sandbox Code Playgroud)
分组A
,我想使用tidyverse
解决方案的以下输出
A B C D E
1 2 3 2 5
2 4 5 3 4
Run Code Online (Sandbox Code Playgroud)
我有很多小组A
.我想我看到了一个答案,coalesce
但我不确定如何让它发挥作用.我想要一个同样适用characters
的解决方案.谢谢!
类似合并行的一个data.frame和合并两行数据框一个,当行是不相交,并包含空值我面临着以下问题针对上述帖子能真正的帮助。
我拥有的数据看起来像这样
| Date | Checkin | Origin | Checkout | Destination |
| 03-07-17 | 08:00 | A | | |
| 03-07-17 | | A | 09:00 | B |
| 03-07-17 | 17:00 | B | | |
| 03-07-17 | | B | 18:00 | A |
| 04-07-17 | 08:00 | A | | |
| 04-07-17 | | A | 09:00 | B |
| 04-07-17 | 17:00 | B …
Run Code Online (Sandbox Code Playgroud)