Footsteps on my way !
perl/linux/测序分析

R不规则数据长变宽

我有一个数据:
a a b a c a b c c c a
1 3 3 3 2 5 7 2 1 9 8
想要转换为如下格式:
a b c
1 3 2
3 3 2
3   1
5   9
8

因为没有现成的R语言实现,因此我实现如下:

#生成长度不等的list (猜测可以直接生成最长长度的data.frame,只是差的值用NA代替)
df<-list()
for (i in unique(row.names(TPM_mtx_filter_asMtx))) {
df[i]<-list(TPM_mtx_filter_asMtx[row.names(TPM_mtx_filter_asMtx)==i,])
}
#将list转换为等长dataframe
df_dataFrame<-as.data.frame(sapply(df, "[", i = 1:max(sapply(df, length))))
#存为文件:
write.csv(df_dataFrame,file = 'Lrrc4/time_all_split.csv',quote = F,row.names = F,na = '')

群友更优雅的实现:

library(tidyr)
library(dplyr)
test = data.frame(x = strsplit(x = c("aabacabccca"),split = "")[[1]],
y = strsplit(x = c("13332572198"),split = "")[[1]])
test %>%
group_by(x) %>%
mutate(id = row_number()) %>%
spread(x, y) %>%
select(-id)

注:实际是类似于群友的,长变宽的过程

生成list更优雅的方式:

split(test$y,test$x)

#https://zhuanlan.zhihu.com/p/46640945

尊重他人劳动成果,转载请注明出处:Bluesky's blog » R不规则数据长变宽

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址