我有一个数据集,我需要一次为几列取值。我已经应用了mutate函数来做到这一点。但是在各列中也需要排除一些文本,例如,
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
答案 0 :(得分:0)
如果同一列中有字符和数字,则默认为字符,并且不能四舍五入。
您必须使用自定义功能:
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)
仍然,不可能在同一列中同时包含字符和数字。而且在一个和另一个之间切换可能非常疯狂