Функция преобразования в столбцы, за исключением нескольких ячеек - PullRequest
0 голосов
/ 27 октября 2019

У меня есть набор данных, в котором мне нужно округлить значения для нескольких столбцов одновременно. Я применил функцию мутации, чтобы сделать это. Но в столбцах также есть некоторые тексты, которые нужно исключить, например,

df 
ColA   ColB      ColC
A     56.568     45.590
B     60.596      B
C     A          78.456

df1 <- df %>% mutate_at(vars(ColB, ColC),funs(round(.,1)))

Но так как столбцы содержат символы, я не могу выполнить его. Ожидаемый результат -

df1
ColA   ColB    ColC
A     56.5     45.5
B     60.5      B
C     A        78.4

1 Ответ

0 голосов
/ 27 октября 2019

Если у вас есть символ и число в одном столбце, по умолчанию используется символ, и вы не можете округлить его.

Вы должны использовать пользовательскую функцию:

library(purrr)
library(dplyr)

df = data.frame(
   ColA=c("A","B","C"),
   ColB=c(56.568,60.596,"A"),
   ColC=c(45.590,"B",78.456)
            )
# you can see they are converted to factor
str(df)
###function to round numbers and convert them back to characters
convertCol = function(x){
y = round(suppressWarnings(as.numeric(as.character(x))),1)
y = as.character(y)
y[is.na(y)] = as.character(x[is.na(y)])
y
}
df %>% map_df(convertCol)

Тем не менее,невозможно иметь как символ, так и число в одном столбце. А переключение между одним и другим может быть совершенно безумным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...