У меня есть такой фрейм данных:
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)
Возможно, вы заметили, что "G: G" на S1 имеет пробел в конце, это преднамеренно.
И у меня есть функция, которая применяет «уникальный» ко всем столбцам фрейма данных и возвращает таблицу со всеми уникальными значениями для каждого столбца.
Функция:
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
На больших наборах данных четкое различие для строки "GG" на S1 не столь очевидно, поэтому я хотел бы, чтобы вывод выглядел больше как "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"
Здесь я четко вижу дополнительное пространство в конце строки GG на S1
И то, что я хотел бы видеть, это что-то вроде:
1 S1 "A:A" "G:G "
2 S2 "A:A" "G:G"
3 S3 "A:A" "T:T"