我正遇到一个DT
问题,我想将1列的格式设置为scientific annotation
,但是此列中的某些值是我正在处理的表的percentage
值。
如果我事先将表中的值更改为paste(n, "%", sep = ' ')
,则rowcallback
会卡在非数字值上
在任何一种情况下,我都可以使用rowcallback
(请参见下文)来格式化scientific annotation
的格式,或者在另一种情况下,可以使用formatPercentage('columnname', 2)
来格式化百分比的列,但是我想对一列和每一行都要做,我需要以'n%表示,而其余的列是科学的。
是否可以对1列执行rowcallback
,但排除特定的行,
对rowcallback
组合scientific annotation
,然后将其他百分比格式的其他单元格格式化为百分比(x%)
下面的datatable
生成sci。一个。但是如何将cars[5,2]
更改为2个十进制的%值,并在其后加上%符号?
datatable(cars/10,
options = list(
rowCallback = JS(
"function(row, data) {",
" $('td:eq(2)', row).html(data[2].toExponential(1));",
"}")
)
)
答案 0 :(得分:1)
用R格式化列不是一个很好的选择,因为列类型将变成字符,并且您将失去对列进行排序的可能性。这是JavaScript的使用方式:
else
{
int countMemberCat = 0;
helper.openConnection();
string query2 = "SELECT Count (*) as 'NoOfMembershipRate' FROM membershiprate WHERE memberrate_desc = @mdesc";
MySqlCommand cmd2 = new MySqlCommand(query2, helper.getConnection());
cmd2.Parameters.AddWithValue("mdesc", txtMemRateDesc.Text);
MySqlDataReader reader = cmd2.ExecuteReader();
while (reader.Read())
{
countMemberCat = int.Parse(reader["NoOfMembershipRate"].ToString());
}
helper.CloseConnection();
if (countMemberCat > 0)
{
MessageBox.Show("Membership Category already exist!");
}
else
{
try
{
double price = double.Parse(txtMemRate.Text);
ClearErrorMessage();
DialogResult dr = MessageBox.Show("Are you sure you want to add new membership category?", "Add?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dr == DialogResult.Yes)
{
if (helper.openConnection())
{
string query = "INSERT INTO `membershiprate` (`memberrate_desc`, memberrate_id, `memberrate_price`, memberrate_count) VALUES (@mdesc, memberrate_id, @mprice, memberrate_id)";
MySqlCommand cmd = new MySqlCommand(query, helper.getConnection());
cmd.Parameters.AddWithValue("mdesc", txtMemRateDesc.Text);
cmd.Parameters.AddWithValue("mprice", txtMemRate.Text);
cmd.ExecuteNonQuery();
helper.CloseConnection();
this.Close();
MessageBox.Show("Successfully added!");
}
答案 1 :(得分:0)
为了具有科学的注释,可以将函数formatC()
与参数format = 'e'
和digits = 1
一起使用。
formatC(cars$dist[1:5] / 10, format = 'e', digits = 1)
# [1] "2.0e-01" "1.0e+00" "4.0e-01" "2.2e+00" "1.6e+00"
要使百分比可视化,因为formatPercentage()
会转换所有列,因此您可以使用paste()
自行创建。
然后,只需创建一个条件,例如使用ifelse()
来说明何时使用科学格式以及何时使用百分比百分号。
cars %>%
mutate_all(funs(. / 10)) %>%
mutate(Condition = 1:n()) %>%
mutate(dist = ifelse(Condition == 5,
paste(round(dist, 2), '%'),
formatC(dist, format = 'e', digits = 1))
) %>%
select(-Condition) %>%
datatable()