Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 强制引入的数字NAs的因子_R_Dataframe - Fatal编程技术网

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