R 强制引入的数字NAs的因子
我知道这个问题已经被解决了数百次,但我有一个将因子转换成数字的问题 以下是我用来生成数据帧并将因子“方向”转换为数字的一些基本代码:R 强制引入的数字NAs的因子,r,dataframe,R,Dataframe,我知道这个问题已经被解决了数百次,但我有一个将因子转换成数字的问题 以下是我用来生成数据帧并将因子“方向”转换为数字的一些基本代码: size <- c(1,2,3,2) directions <- factor(c("North", "East", "South", "South")) df <- data.frame(size,directions) fac_indx <- sapply(df, is.factor) df[fac_indx] <- lapp
size <- c(1,2,3,2)
directions <- factor(c("North", "East", "South", "South"))
df <- data.frame(size,directions)
fac_indx <- sapply(df, is.factor)
df[fac_indx] <- lapply(df[fac_indx], function(x) as.numeric(as.character(x)))
size您似乎想将方向转换为数值,对吗?如果这是您想要的,您可以定义另一个变量,该变量包含每个方向的数值,因此:
df$directions.num <- ifelse(df$directions=="North", 1,
ifelse(df$directions=="East", 2,
ifelse(df$directions=="South", 3, 4)))
df
size directions directions.num
1 1 North 1
2 2 East 2
3 3 South 3
4 2 South 3
df$directions.num您似乎想将方向转换为数值,对吗?如果这是您想要的,您可以定义另一个变量,该变量包含每个方向的数值,因此:
df$directions.num <- ifelse(df$directions=="North", 1,
ifelse(df$directions=="East", 2,
ifelse(df$directions=="South", 3, 4)))
df
size directions directions.num
1 1 North 1
2 2 East 2
3 3 South 3
4 2 South 3
df$directions.num你基本上遇到了与文档警告相反的问题
在这种情况下,as.numeric(x)
应该可以正常工作
更常见的问题是,有人问“嘿,为什么这个代码不起作用?”
你基本上有相反的问题,然后什么文件警告
在这种情况下,as.numeric(x)
应该可以正常工作
更常见的问题是,有人问“嘿,为什么这个代码不起作用?”
也可以使用开关进行表格查找
sapply(df$directions, function(d)
switch(as.character(d),
"East" = 1,
"North" = 2,
"South" = 3,
"West" = 4
)
)
#[1] 2 1 3 3
然后将上述指令的结果分配给data.frame的新列。也可以使用开关进行表格查找
sapply(df$directions, function(d)
switch(as.character(d),
"East" = 1,
"North" = 2,
"South" = 3,
"West" = 4
)
)
#[1] 2 1 3 3
然后将上述指令的结果分配给data.frame的一个新列。您基本上是在尝试将转换为.numeric(“North”)
,这不是一个非常合乎逻辑的转换。也许可以去掉作为.character
?此外,如果您指定所需的输出,这将有所帮助。@Jaap,我希望得到的是将factor列转换为一个数字列,该列具有与每一级factors关联的唯一数字ID。因此df$directions现在将等于c(2,1,3,3)@Jaap删除as.character确实符合我的要求,但我不明白为什么它一定有效。通过阅读因子的文档
说明,当因子转换为数值时,需要使用as.numeric(as.character(f))
因子存储为带标签的整数。如帮助文件中所述,转换为数字是针对以下情况的:x您基本上是尝试将转换为.numeric(“North”)
,这不是一种非常合乎逻辑的转换。也许可以去掉作为.character
?此外,如果您指定所需的输出,这将有所帮助。@Jaap,我希望得到的是将factor列转换为一个数字列,该列具有与每一级factors关联的唯一数字ID。因此df$directions现在将等于c(2,1,3,3)@Jaap删除as.character确实符合我的要求,但我不明白为什么它一定有效。通过阅读因子的文档
说明,当因子转换为数值时,需要使用as.numeric(as.character(f))
因子存储为带标签的整数。如帮助文件中所述,将其转换为数字适用于以下情况:x