条件不将整数识别为数字,它认为它是一个字符
condition does not recognize integers as number, it is considering it a character
我有一个包含 2 列的数据框
第二列具有以下值之一,在数据框中被识别为数字:0、1、2 或 3
我想创建第三列,其中的字符串值基于第二列的值。
我试过了:
df2 = data.frame(r = tssd2, cgmval = colcgm6)
df2$clrl[colcgm6 = 0] ="black"
df2$clrl[colcgm6 = 1] ="lightskyblue"
df2$clrl[colcgm6 = 2] ="blue"
df2$clrl[colcgm6 = 3] ="purple"
我得到的错误是:
Error in `$<-.data.frame`(`*tmp*`, "clrl", value = character(0)) :
replacement has 0 rows, data has 4139
根据错误的描述,我的理解是代码试图将 colcgm6 的数值(0 到 3)与字符 0、1、2 和 3 进行比较。所以结果是条件永远不会为真,并且不会将任何值输入到新的列中。
请帮忙,
编辑:
对于可重现的示例,请使用 tssd 作为数值 (1, 1, 1) 的向量,使用 coldcgm6 作为数值 (0, 1, 2) 的向量。
我们可以通过使用数字索引而不是比较 (==
) 4 次来轻松做到这一点
clrl <- c("black", "lightskyblue", "blue", "purple")
df2$clrl <- clrl[colcgm6+1]
head(df2)
# r cgmval clrl
#1 -0.7622144 1 lightskyblue
#2 -1.4290903 0 black
#3 0.3322444 2 blue
#4 -0.4690607 2 blue
#5 -0.3349868 2 blue
#6 1.5362522 3 purple
在 OP 的代码中,没有使用逻辑运算符 (==
),而是使用了赋值运算符 (=
)。通过更改它,它将解决问题。
数据
set.seed(24)
colcgm6 <- sample(0:3, 24, replace=TRUE)
tssd2 <- rnorm(24)
df2 <- data.frame(r = tssd2, cgmval = colcgm6)
我有一个包含 2 列的数据框 第二列具有以下值之一,在数据框中被识别为数字:0、1、2 或 3
我想创建第三列,其中的字符串值基于第二列的值。
我试过了:
df2 = data.frame(r = tssd2, cgmval = colcgm6)
df2$clrl[colcgm6 = 0] ="black"
df2$clrl[colcgm6 = 1] ="lightskyblue"
df2$clrl[colcgm6 = 2] ="blue"
df2$clrl[colcgm6 = 3] ="purple"
我得到的错误是:
Error in `$<-.data.frame`(`*tmp*`, "clrl", value = character(0)) :
replacement has 0 rows, data has 4139
根据错误的描述,我的理解是代码试图将 colcgm6 的数值(0 到 3)与字符 0、1、2 和 3 进行比较。所以结果是条件永远不会为真,并且不会将任何值输入到新的列中。
请帮忙,
编辑: 对于可重现的示例,请使用 tssd 作为数值 (1, 1, 1) 的向量,使用 coldcgm6 作为数值 (0, 1, 2) 的向量。
我们可以通过使用数字索引而不是比较 (==
) 4 次来轻松做到这一点
clrl <- c("black", "lightskyblue", "blue", "purple")
df2$clrl <- clrl[colcgm6+1]
head(df2)
# r cgmval clrl
#1 -0.7622144 1 lightskyblue
#2 -1.4290903 0 black
#3 0.3322444 2 blue
#4 -0.4690607 2 blue
#5 -0.3349868 2 blue
#6 1.5362522 3 purple
在 OP 的代码中,没有使用逻辑运算符 (==
),而是使用了赋值运算符 (=
)。通过更改它,它将解决问题。
数据
set.seed(24)
colcgm6 <- sample(0:3, 24, replace=TRUE)
tssd2 <- rnorm(24)
df2 <- data.frame(r = tssd2, cgmval = colcgm6)