Paste data.frame rows into an ordered factor
data.frame
character
separator to use between columns
logical
whether to remove NA values, or include them as "NA"
logical
whether to condense blank or empty values
without including an extra delimiter between columns.
logical
whether to include the colname delimited
prior to the value, using sepName as the delimiter.
logical
indicating whether non-factor columns
should order factor levels based upon the existing order of
unique items. This option is intended for data.frame
whose
columns are already sorted in proper order, but where columns
are not factor
with appropriate factor levels. Note that
even when keepOrder=TRUE
all existing factor
columns will
honor the order of factor levels already present in those
columns.
integer
or character
passed to mixedSortDF()
.
This argument defines the order of columns sorted by mixedSortDF()
,
and does not affect the order of columns pasted. Columns are
always pasted in the same order they appear in x
. This argument
byCols
was previously passed via ...
but is added here
to make this connection more direct.
logical
passed to base::factor()
to determine whether
NA
values are first or last in factor level order.
additional arguments are passed to jamba::pasteByRow()
,
and to jamba::mixedSortDF()
.
This function is an extension to jamba::pasteByRow()
which
pastes rows from a data.frame
into a character vector. This
function defines factor levels by running jamba::mixedSortDF(unique(x))
and calling jamba::pasteByRow()
on the result. Therefore the
original order of the input x
is maintained while the factor
levels are based upon the appropriate column-based sort.
Note that the ...
additional arguments are
passed to jamba::mixedSortDF()
to customize the column-based
sort order, used to define factor levels. A good way to test the
order of factors is to run jamba::mixedSortDF(unique(x))
with
appropriate arguments, and confirm the rows are ordered as expected.
Note also that jamba::mixedSortDF()
uses jamba::mixedSort()
which itself performs alphanumeric sort in order to keep
values in proper numeric order where possible.
Other jam string functions:
asSize()
,
breaksByVector()
,
cPasteSU()
,
cPasteS()
,
cPasteUnique()
,
cPasteU()
,
cPaste()
,
fillBlanks()
,
formatInt()
,
gsubOrdered()
,
gsubs()
,
makeNames()
,
mixedOrder()
,
mixedSortDF()
,
mixedSorts()
,
mixedSort()
,
mmixedOrder()
,
nameVectorN()
,
nameVector()
,
padInteger()
,
padString()
,
pasteByRow()
,
sizeAsNum()
,
tcount()
,
ucfirst()
,
uniques()
f <- LETTERS;
df <- data.frame(A=f[rep(1:3, each=2)],
B=c(NA, f[3]),
C=c(NA, NA, f[2]))
df
#> A B C
#> 1 A <NA> <NA>
#> 2 A C <NA>
#> 3 B <NA> B
#> 4 B C <NA>
#> 5 C <NA> <NA>
#> 6 C C B
# note that output is consistent with mixedSortDF()
jamba::mixedSortDF(df)
#> Warning: 'length(x) = 2 > 1' in coercion to 'logical(1)'
#> Warning: 'length(x) = 2 > 1' in coercion to 'logical(1)'
#> Warning: 'length(x) = 2 > 1' in coercion to 'logical(1)'
#> A B C
#> 2 A C <NA>
#> 1 A <NA> <NA>
#> 4 B C <NA>
#> 3 B <NA> B
#> 6 C C B
#> 5 C <NA> <NA>
jamba::pasteByRowOrdered(df)
#> Warning: 'length(x) = 2 > 1' in coercion to 'logical(1)'
#> Warning: 'length(x) = 2 > 1' in coercion to 'logical(1)'
#> Warning: 'length(x) = 2 > 1' in coercion to 'logical(1)'
#> 1 2 3 4 5 6
#> A A_C B_B B_C C C_C_B
#> Levels: A_C A B_C B_B C_C_B C
jamba::mixedSortDF(df, na.last=FALSE)
#> Warning: 'length(x) = 2 > 1' in coercion to 'logical(1)'
#> Warning: 'length(x) = 2 > 1' in coercion to 'logical(1)'
#> Warning: 'length(x) = 2 > 1' in coercion to 'logical(1)'
#> A B C
#> 1 A <NA> <NA>
#> 2 A C <NA>
#> 3 B <NA> B
#> 4 B C <NA>
#> 5 C <NA> <NA>
#> 6 C C B
jamba::pasteByRowOrdered(df, na.last=FALSE)
#> Warning: 'length(x) = 2 > 1' in coercion to 'logical(1)'
#> Warning: 'length(x) = 2 > 1' in coercion to 'logical(1)'
#> Warning: 'length(x) = 2 > 1' in coercion to 'logical(1)'
#> 1 2 3 4 5 6
#> A A_C B_B B_C C C_C_B
#> Levels: A A_C B_B B_C C C_C_B
jamba::mixedSortDF(df, byCols=c(3, 2, 1))
#> Warning: 'length(x) = 2 > 1' in coercion to 'logical(1)'
#> Warning: 'length(x) = 2 > 1' in coercion to 'logical(1)'
#> Warning: 'length(x) = 2 > 1' in coercion to 'logical(1)'
#> A B C
#> 6 C C B
#> 3 B <NA> B
#> 2 A C <NA>
#> 4 B C <NA>
#> 1 A <NA> <NA>
#> 5 C <NA> <NA>
jamba::pasteByRowOrdered(df, byCols=c(3, 2, 1))
#> Warning: 'length(x) = 2 > 1' in coercion to 'logical(1)'
#> Warning: 'length(x) = 2 > 1' in coercion to 'logical(1)'
#> Warning: 'length(x) = 2 > 1' in coercion to 'logical(1)'
#> 1 2 3 4 5 6
#> A A_C B_B B_C C C_C_B
#> Levels: C_C_B B_B A_C B_C A C
df1 <- data.frame(group=rep(c("Control", "ABC1"), each=6),
time=rep(c("Hour2", "Hour10"), each=3),
rep=paste0("Rep", 1:3))
# default will sort each column alphanumerically
pasteByRowOrdered(df1)
#> Warning: 'length(x) = 2 > 1' in coercion to 'logical(1)'
#> Warning: 'length(x) = 2 > 1' in coercion to 'logical(1)'
#> Warning: 'length(x) = 2 > 1' in coercion to 'logical(1)'
#> 1 2 3 4
#> Control_Hour2_Rep1 Control_Hour2_Rep2 Control_Hour2_Rep3 Control_Hour10_Rep1
#> 5 6 7 8
#> Control_Hour10_Rep2 Control_Hour10_Rep3 ABC1_Hour2_Rep1 ABC1_Hour2_Rep2
#> 9 10 11 12
#> ABC1_Hour2_Rep3 ABC1_Hour10_Rep1 ABC1_Hour10_Rep2 ABC1_Hour10_Rep3
#> 12 Levels: ABC1_Hour2_Rep1 ABC1_Hour2_Rep2 ABC1_Hour2_Rep3 ... Control_Hour10_Rep3
# keepOrder=TRUE will honor existing order of character columns
pasteByRowOrdered(df1, keepOrder=TRUE)
#> Warning: 'length(x) = 2 > 1' in coercion to 'logical(1)'
#> Warning: 'length(x) = 2 > 1' in coercion to 'logical(1)'
#> Warning: 'length(x) = 2 > 1' in coercion to 'logical(1)'
#> 1 2 3 4
#> Control_Hour2_Rep1 Control_Hour2_Rep2 Control_Hour2_Rep3 Control_Hour10_Rep1
#> 5 6 7 8
#> Control_Hour10_Rep2 Control_Hour10_Rep3 ABC1_Hour2_Rep1 ABC1_Hour2_Rep2
#> 9 10 11 12
#> ABC1_Hour2_Rep3 ABC1_Hour10_Rep1 ABC1_Hour10_Rep2 ABC1_Hour10_Rep3
#> 12 Levels: Control_Hour2_Rep1 Control_Hour2_Rep2 ... ABC1_Hour10_Rep3