我有一个数据框df
,其中包含以下列:
> names(df)
[1] "survived" "sex" "age"
[4] "pclass" "sibsp" "predict.t_tree."
如何从predict.t_tree
对survived
进行逐元素减法?如果我可以将结果作为数组或其他东西并且不更新数据框本身,那将是很好的。
以下是一些示例数据:
> typeof(df$survived)
[1] "integer"
> head(df$survived,5)
[1] 1 1 0 0 0
> typeof(df$predict.t_tree)
[1] "integer"
> head(df$predict.t_tree,5)
[1] 1 0 1 0 1
Levels: 0 1
以下代码只是出错:
> df$survived - df$predict.t_tree
Warning message:
In Ops.factor(df$survived, df$predict.t_tree) : - not meaningful for factors
答案 0 :(得分:2)
请尝试以下数据:
as.numeric(as.character(df$survived)) - df$predict.t_tree
修改强> 添加了一个小例子
df <- data.frame(x = c("1", "2", "3"),
y = 1:3)
str(df)
# 'data.frame': 3 obs. of 2 variables:
# $ x: Factor w/ 3 levels "1","2","3": 1 2 3
# $ y: int 1 2 3
x列是因子类型。您必须将数据类型强制转换为数字才能执行数学运算。
as.numeric(df$x) - df$y
答案 1 :(得分:0)
df$predict.t_tree
被创建为因子
df$predict.t_tree = as.numeric(as.character(df$predict.t_tree))
df$survived - df$predict.t_tree
答案 2 :(得分:0)
让我们看一下输出:
> typeof(df$survived)
[1] "integer"
> head(df$survived,5)
[1] 1 1 0 0 0
> typeof(df$predict.t_tree)
[1] "integer"
> head(df$predict.t_tree,5)
[1] 1 0 1 0 1
Levels: 0 1 <~~~~~ **** NOTICE HERE ****
当您看到"Levels: ____ "
时,它告诉您向量(或列)是'因子'而不是字符串或数字。如果您期望的不是factor
,那么您必须先将其转换为as.character(.)
。 (非常非常谨慎地使用as.numeric(.)
直接对因子,因为它可能不是您将要寻找的结果)
转换后,成对操作很简单:
df$predict.t_tree <- as.numeric(as.character(df$predict.t_tree))
# Then, this will give you what you are after
df$survived - df$predict.t_tree