我正在尝试从此处执行代码:
Change the class from factor to numeric of many columns in a data frame
在具有140列的数据框中
cols = c(1:140);
merged_dataset[,cols] = apply(merged_dataset[,cols], 2, function(x) as.numeric(as.character(x)));
问题是对于某些列,我得到了NA。有没有办法以某种方式从代码中排除这些列,以便我保留数据并且它们不会转换为NA?我认为这些列的类型是字符,如果有帮助的话。
答案 0 :(得分:1)
如果您已经知道要删除的列的索引,则可以对数据框进行子集化以仅定位某些列:
cols <- c(1:140) # all columns
cols.skip <- c(1,3,5,21) # columns which CAN'T be converted to numeric
cols.keep <- cols[!cols %in% cols.skip]
merged_dataset[,cols.keep] <- apply(merged_dataset[,cols.keep], 2, function(x) {
as.numeric(as.character(x))
})
要使用列名而不是索引来实现类似的逻辑:
cols.skip <- c("a", "b", "c")
cols.keep <- !(names(merged_dataset) %in% cols.skip)
merged_dataset[,cols.keep] <- apply(merged_dataset[,cols.keep], 2, function(x) {
as.numeric(as.character(x))
})
答案 1 :(得分:0)
在因子水平内也可以替换任何不适当的字符以更好地提取任何数字:
convert_factors_to_numeric <- function(df) {
as.data.frame(lapply(df,
function(x) {
if (is.factor(x)) {
as.numeric(as.character(trimws(x),
which = "both"))
} else{
x
}
}
),
stringsAsFactors = FALSE)
}
df_converted <- convert_factors_to_numeric(df)