数据帧中的折叠列(R)
基本上,我有一个数据帧,df数据帧中的折叠列(R),r,dataframe,data.table,R,Dataframe,Data.table,基本上,我有一个数据帧,df Beginning1 Protein2 Protein3 Protein4 Biomarker1 Pathway3 A G NA NA F Pathway8 Z G NA NA E Pathway9 A
Beginning1 Protein2 Protein3 Protein4 Biomarker1
Pathway3 A G NA NA F
Pathway8 Z G NA NA E
Pathway9 A G Z H F
Pathway6 Y G Z H E
Pathway2 A G D NA F
Pathway5 Q G D NA E
Pathway1 A D K NA F
Pathway7 A B C D F
Pathway4 V B C D E
我想组合数据帧,这样当从“Protein2”到“Protein4”相同时,这些行被压缩,得到以下结果:
Beginning1 Protein2 Protein3 Protein4 Biomarker1
Pathway3 A,Z G NA NA F,E
Pathway9 A,Y G Z H F,E
Pathway2 A,Q G D NA F,E
Pathway1 A D K NA F
Pathway7 A,V B C D F,E
这与我之前提出的一个问题()非常相似,但不同之处在于我也在合并“Begining1”行
到目前为止,我已经尝试:
library(dat.table)
dat<-data.table(df)
Total_collapse <- dat[, .(
Biomarker1 = paste0(Biomarker1, collapse = ", ")),
by = .(Beginning1, Protein1, Protein2, Protein3)]
Total_collapse <- dat[, .(
Beginning1 = paste0(Beginning1, collapse = ", ")),
by = .(Protein1, Protein2, Protein3)]
有人知道如何解决这个问题吗?我还尝试从中复制解决方案,但没有成功
如果这是一个简单的错误,我很抱歉-我对R很陌生。这里有一个可能的解决方案,使用
dplyr
df %>% group_by_at(vars(Protein2:Protein4)) %>%
summarize_all(paste, collapse=",")
使用
data.table
可以使用.SD
引用参数中未指定的所有列。然后我们可以使用lappy
完成paste()
和collapse
library(data.table)
dt <- read.table(text = "Beginning1 Protein2 Protein3 Biomarker1
A G NA NA F
Z G NA NA E
A G Z H F
Y G Z H E
A G D NA F
Q G D NA E
A D K NA F
A B C D F
V B C D E",header = T)
dt <- data.table(dt)
dt[,lapply(.SD, function(col) paste(col, collapse=", ")),
by=.(Protein2, Protein3, Protein4)]
我们可以从base R
r1 <- aggregate(cbind(Beginning1, Biomarker1)~., replace(df,is.na(df), "NA"), FUN = toString)
r1
# Protein2 Protein3 Protein4 Beginning1 Biomarker1
#1 B C D A, V F, E
#2 G Z H A, Y F, E
#3 G D NA A, Q F, E
#4 D K NA A F
#5 G NA NA A, Z F, E
r1[r1=="NA"] <- NA
r1感谢您的编辑。我仍在为如何使数据帧在StackOverlownp上显示出应有的效果而挣扎。您可能需要给出一个可复制的示例(如链接中的第一行代码,数据)
Protein2 Protein3 Protein4 Beginning1 Biomarker1
1: G NA NA A, Z F, E
2: G Z H A, Y F, E
3: G D NA A, Q F, E
4: D K NA A F
5: B C D A, V F, E
r1 <- aggregate(cbind(Beginning1, Biomarker1)~., replace(df,is.na(df), "NA"), FUN = toString)
r1
# Protein2 Protein3 Protein4 Beginning1 Biomarker1
#1 B C D A, V F, E
#2 G Z H A, Y F, E
#3 G D NA A, Q F, E
#4 D K NA A F
#5 G NA NA A, Z F, E
r1[r1=="NA"] <- NA