ASH*_*H.K 1 row r simplify dataframe
我有一组处理蛋白质序列的15个数据框,我的目标是分析蛋白质随时间的变化.但是,我的数据框架有大约5000个基因.所以我正在寻找一种简化数据的方法,以便于分析.
下面是一个示例数据框.
> sample
p1 p2 p3 year
1 a d d 1970
2 a c e 1970
3 b d e 1970
4 b c d 1985
5 b c d 1985
6 b c d 1999
Run Code Online (Sandbox Code Playgroud)
我想要做的是每年分析每个位置(p1 p2和p3)并返回该年度该位置最常见的条目,从而创建一个每年只有一个序列的新数据框.结果数据框应如下所示:
> result
p1 p2 p3 year
1 a d e 1970
2 b c d 1985
3 b c d 1999
Run Code Online (Sandbox Code Playgroud)
数据框已按日期排序,但我不知道每年有多少条目.那么,有没有办法用这种方法简化我的数据?
一个data.table解决方案:
dat <- read.table(text=' p1 p2 p3 year
1 a d d 1970
2 a c e 1970
3 b d e 1970
4 b c d 1985
5 b c d 1985
6 b c d 1999',header=TRUE)
library(data.table)
DT <- as.data.table(dat)
DT[,lapply(.SD,function(x){ y = table(x)
names(y)[which.max(y)]}),
year]
# year p1 p2 p3
# 1: 1970 a d e
# 2: 1985 b c d
# 3: 1999 b c d
Run Code Online (Sandbox Code Playgroud)
do.call(rbind.data.frame,by(dat, dat$year, function(x)
lapply(x, function(y) {
t <- table(y)
names(t)[which.max(t)]
})))
# p1 p2 p3 year
# 1970 a d e 1970
# 1985 b c d 1985
# 1999 b c d 1999
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1106 次 |
| 最近记录: |