R изменить количество значащих цифр в таблице gt, заменив значения из другого столбца

Я пытаюсь создать серию таблиц gt со значениями, показанными на 3-м рис. Поскольку я хочу отображать нечисловые символы, столбец, который я хочу отобразить, является фактором. Как лучше всего это сделать? Я думал, что смогу заменить значения столбца фактора значениями из числового столбца, но я не уверен, как это сделать. Приведенный ниже код является примером большого набора данных, где я хотел бы заменить все числовые значения в Area1 соответствующими более короткими значениями в Area2.

Area1 <- as.factor(c(0,0, 0.50659782, "NS"))
Area2 <- c(NA, NA, 0.507, NA)
d <-data.frame(Area1, Area2) %>% gt() 

По сути, я хочу, чтобы столбец Area1 выглядел как

Area1
0
0
0.507
NS

person bartski    schedule 19.11.2020    source источник


Ответы (1)


Поскольку ваши данные имеют смешанные типы, числа уже изменены на символы/факторы. Вы можете использовать подход регулярных выражений, чтобы хранить данные только до 3 знаков после запятой.

library(gt)
Area1 <- as.factor(c(0,0, 0.50659782, "NS"))
Area2 <- c(NA, NA, 0.507, NA)
d <-data.frame(Area1, Area2) 
d$Area1 <- ifelse(is.na(d$Area2), as.character(d$Area1), d$Area2)
d <- d[-2]
gt(d)

введите здесь описание изображения

person Ronak Shah    schedule 19.11.2020
comment
Спасибо @Ronak, но предлагаемое вами решение заменяет значения во всех столбцах, которых в моем исходном наборе данных несколько. Мне нужно что-то, что будет нацелено только на столбец Area1 в нескольких строках. - person bartski; 20.11.2020
comment
Он также не округляет значения в большую или меньшую сторону. - person bartski; 20.11.2020
comment
Вы не можете округлить значения, потому что это не числа, а множители. Проверьте class(d$Area1). Вместо lapply используйте d$Area1 <- sub('(.*\\..{3}).*', '\\1', d$Area1), чтобы настроить таргетинг только на Area1. - person Ronak Shah; 20.11.2020
comment
да, я понимаю, что не могу округлить множители, поэтому я хотел попробовать заменить эти значения соответствующими значениями Area2 - person bartski; 20.11.2020
comment
Да, спасибо, но я оставлю этот вопрос открытым, так как все же хотелось бы найти решение с заменой значений из Area2 - person bartski; 20.11.2020
comment
В своем ответе я заменяю значения из Area2 в Area1. проверьте код ifelse. - person Ronak Shah; 21.11.2020
comment
хорошо, я вижу это сейчас. Спасибо. Я до сих пор не уверен в точном значении sub('(.*\\..{3}).*', '\\1', d$Area1). Что означает ''(.*\\..{3}).*''? - person bartski; 25.11.2020
comment
Это выбирает числа до 3 знаков после запятой. Хотя я удалил этот код сейчас. - person Ronak Shah; 25.11.2020