我有一个这样的数据框:
df<-data.frame(S1=c(rep("A:A",10),rep("G:G ",10)),
S2=c(rep("A:A",10),rep("G:G",10)),
S3=c(rep("A:A",10),rep("T:T", 10)),
stringsAsFactors = FALSE)
您可能已经注意到S1上的“ G:G”在末尾有一个空格,就是故意的。
我有一个函数,该函数将“唯一”应用于数据帧的所有列,并返回具有每列所有唯一值的表。
功能:
loop.unique<-function(df){
w<-create.df(x=capture.output(for (i in colnames(df)){
cat(unique(df[[i]]),"\n")}),
y=c("unique.vals"))
z<-create.df(x=colnames(df),y=c("col"))
v<-cbind(z,w)
return(v)
}
输出:
col unique.vals
1 S1 A:A G:G
2 S2 A:A G:G
3 S3 A:A T:T
在较大的数据集上,S1上“ GG”字符串的明显区别不是那么明显,因此我希望输出看起来更像“ print(unique(df)””,如该函数所示:
loop.unique.extra<-function(df){
for (i in colnames(df)){
print(unique(df[[i]]),na.print="<NA>")
}
}
哪个给出此输出:
[1] "A:A" "G:G "
[1] "A:A" "G:G"
[1] "A:A" "T:T"
在这里,我可以清楚地看到S1上GG字符串末尾的多余空间
我想看到的是这样的:
1 S1 "A:A" "G:G "
2 S2 "A:A" "G:G"
3 S3 "A:A" "T:T"