我有一个数据框,其中的列包含可变数量的数字和可变数量的NA。数据框如下所示:
V1 V2 V3 V4 V5 V6
1 0 11 4 0 0 10
2 0 17 3 0 2 2
3 NA 0 4 0 1 9
4 NA 12 NA 1 1 0
<snip>
743 NA NA NA NA 8 NA
744 NA NA NA NA 0 NA
我想制作一个箱形图,但是当我这样做时
boxplot(dataframe)
我收到错误
adding class "factor" to an invalid object
当我这样做时
lapply(dataframe,class)
我得到了以下输出:
$V1
[1] "factor"
$V2
[1] "factor"
<snip>
$V6
[1] "factor"
那么如何更改我的数据框以便将列视为数字?
答案 0 :(得分:5)
您想将as.numeric(as.character(...))
应用于每个因子列。下面的代码显示了如何只影响因子变量而不仅仅是数字类型。
## dummy data
df <- data.frame(V1 = factor(sample(1:5, 10, rep = TRUE)),
V2 = factor(sample(99:101, 10, rep = TRUE)),
V3 = factor(sample(1:2, 10, rep = TRUE)),
V4 = 1:10)
df2 <- data.frame(sapply(df, function(x) { if(is.factor(x)) {
as.numeric(as.character(x))
} else {
x
}
}))
这给出了:
> df2
V1 V2 V3 V4
1 4 101 2 1
2 1 100 1 2
3 5 99 2 3
4 4 99 2 4
5 2 100 1 5
6 2 100 2 6
7 2 101 2 7
8 4 100 1 8
9 2 101 2 9
10 4 101 1 10
> str(df2)
'data.frame': 10 obs. of 4 variables:
$ V1: num 4 1 5 4 2 2 2 4 2 4
$ V2: num 101 100 99 99 100 100 101 100 101 101
$ V3: num 2 1 2 2 1 2 2 1 2 1
$ V4: num 1 2 3 4 5 6 7 8 9 10
答案 1 :(得分:2)
怎么样
as.data.frame(lapply(dat1,function(x){as.numeric(as.character(x))}))
只是将每列转换为数字(首先转换为字符后)。您必须小心这一点,因为将因子简单地转换为数字通常会导致基础整数代码,而不是您看到的值。
答案 2 :(得分:1)
使用测试data.frame:
testframe <- data.frame(V1 = as.factor(c(0,0,NA,NA)), V2 = as.factor(c(11,17,0,12)))
> sapply(testframe, class)
V1 V2
"factor" "factor"
您可以使用
testframe.n <- as.data.frame(sapply(testframe, as.numeric))
> sapply(testframe.n, class)
V1 V2
"numeric" "numeric"
现在,所有列都应该是数字,并且可以调用boxplot。