Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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中的数值_R_Variables_Type Conversion_Numeric - Fatal编程技术网

将系数/?标称变量转换为R中的数值

将系数/?标称变量转换为R中的数值,r,variables,type-conversion,numeric,R,Variables,Type Conversion,Numeric,我的问题似乎与你有关 然而,这里给出的方法对我不起作用 我将数据集中的向量定义为:eduyears1994您可以试试 c(17,8,4)[as.numeric(eduyears1994)] #[1] 17 4 17 4 17 17 4 4 17 17 17 17 4 8 4 4 8 4 8 8 或 如果8实际上是一个typo,您可以使用 library(stringi) as.numeric(unlist(stri_extract_all_regex(eduyear

我的问题似乎与你有关

然而,这里给出的方法对我不起作用

我将数据集中的向量定义为:
eduyears1994您可以试试

c(17,8,4)[as.numeric(eduyears1994)]
#[1] 17  4 17  4 17 17  4  4 17 17 17 17  4  8  4  4  8  4  8  8

如果
8
实际上是一个
typo
,您可以使用

 library(stringi)
 as.numeric(unlist(stri_extract_all_regex(eduyears1994, '^\\d+')))
 #[1] 17  4 17  4 17 17  4  4 17 17 17 17  4  2  4  4  2  4  2  2
数据
set.seed(21)
教育年1994你可以试试

c(17,8,4)[as.numeric(eduyears1994)]
#[1] 17  4 17  4 17 17  4  4 17 17 17 17  4  8  4  4  8  4  8  8

如果
8
实际上是一个
typo
,您可以使用

 library(stringi)
 as.numeric(unlist(stri_extract_all_regex(eduyears1994, '^\\d+')))
 #[1] 17  4 17  4 17 17  4  4 17 17 17 17  4  2  4  4  2  4  2  2
数据
set.seed(21)

eduyears1994使用@akrun的例子:

set.seed(21)
eduyears1994 <- factor(sample(c('4 lata/1', 2, '17 lat'), 20, replace=TRUE))

警告:这会将“2”转换为2,而不是8,这不是您所要求的。我不太确定你用什么逻辑把“4lata/1”转换成4,“17lat”转换成17,“2”转换成8——也许你能解释一下?可能是打字错误?

使用@akrun的示例:

set.seed(21)
eduyears1994 <- factor(sample(c('4 lata/1', 2, '17 lat'), 20, replace=TRUE))

警告:这会将“2”转换为2,而不是8,这不是您所要求的。我不太确定你用什么逻辑把“4lata/1”转换成4,“17lat”转换成17,“2”转换成8——也许你能解释一下?可能是打字错误?

使用您的实际数据,您似乎有一个通用格式的字符向量

n lat/a,b
其中
n
是年份,“a,b”是某种标签。这将节省时间

vec <- c("17 lat/9","10 lat/3,4","10 lat/3,4","17 lat/9","17 lat/9","12 lat/5,6","10 lat/3,4","10 lat/3,4","12 lat/5,6")
x <- strsplit(vec,split=" lat/",fixed=TRUE)
sapply(x,function(x)as.integer(x[1]))
# [1] 17 10 10 17 17 12 10 10 12

vec使用实际数据,您似乎有一个通用格式的字符向量

n lat/a,b
其中
n
是年份,“a,b”是某种标签。这将节省时间

vec <- c("17 lat/9","10 lat/3,4","10 lat/3,4","17 lat/9","17 lat/9","12 lat/5,6","10 lat/3,4","10 lat/3,4","12 lat/5,6")
x <- strsplit(vec,split=" lat/",fixed=TRUE)
sapply(x,function(x)as.integer(x[1]))
# [1] 17 10 10 17 17 12 10 10 12


vec不清楚为什么您要将
'2'
更改为
8
,而在其他情况下,即使用
lat
,则选择前缀号。您是否测试了我的解决方案?我正在检查标签2是否将转换为它所代表的内容,也就是说,8年了,因为我不确定我收到的错误消息是否是因为R看到的是标签,而不是文本@请在您的帖子下面对您的解决方案发表更多评论谢谢,我知道了。您收到的错误消息是因为您的向量是
因子
,并且您正试图分配一个
或因子没有的级别。我会在分配之前将其转换为
字符
类,即
教育年1994谢谢!似乎:教育年1994不清楚为什么您要将
'2'
更改为
8
,而在其他情况下,即使用
lat
,前缀号被选中。您测试过我的解决方案吗?我正在检查标签2是否会转换为它所代表的内容,也就是说,8年了,因为我不确定我收到的错误消息是否是因为R看到的是标签,而不是文本@请在您的帖子下面对您的解决方案发表更多评论谢谢,我知道了。您收到的错误消息是因为您的向量是
因子
,并且您正试图分配一个
或因子没有的级别。我会在分配之前将其转换为
字符
类,即
教育年1994谢谢!似乎:eduyears1994我认为这与OP的手册代码
eduyears1994[eduyears1994==“2”]相矛盾,我选择关注提供的样本数据集,而不是制作一个。在该示例中,没有“4 lat/1”等。如果该示例不具有代表性,则此答案可能不适用于OP。我还考虑使用提供的数据集,直到我在strsplit中看到他的codeError(eduyears1994,split=“lat/”,fixed=TRUE):非字符argument@Asiack
strsplit
需要
字符
向量。尝试
strsplit(as.character(eduyears1994),…
我认为这与OP的手动代码
eduyears1994[eduyears1994==“2”]相矛盾。我选择关注提供的样本数据集,而不是构建一个。在该样本中,没有“4 lat/1”,等等。如果样本不具有代表性,那么这个答案可能不适用于OP。我还考虑使用提供的数据集,直到我在strsplit中看到他的codeError(eduyears1994,split=“lat/”,fixed=TRUE):非字符argument@Asiack
strsplit
需要
character
vector。请尝试
strsplit(as.character(1994年教育年鉴),…
我正在检查标签2是否会转换为它所代表的内容,即8年。gsub产生以下结果:>作为数值(gsub(“lata*/*[0-9,]*”,“”,1994年教育年鉴))[1]17 NA 17 17 12 NA 12 14 NA 17 12 NA 12 12 17 NA 12 12 17 NA 12 12 17[34]17 17 12 12 14 12 8 NA 12 8 17 NA 12 NA 17 8 NA 12 12 17 NA 14 NA 14 NA 12 NA 17 12我很惊讶你得到了所有这些
NA
值——在我的例子中,所有的东西都被转换了。你能展示
dput(教育年1994)
的结果吗?你能解释一下为什么会有“2”这样的标签吗(由于我不理解的原因,这相当于8年)混合了文本标签,如“17 lat”?抱歉延迟。我认为数据被指定为标称而不是数字,R以一种奇怪的方式读取。dput(eduyears1994)的结果,其中eduyears1994有9个级别,或者我称之为“标签”:无教育/0,4年/1,8年/2,10年/3,4(我想这取决于小学前8年后额外的2年来自哪里),12年/5,6,14年/7,8我正在检查标签2是否会转换为它所代表的,即8年。gsub产生以下结果:>as.numeric(gsub(“lata*/*[0-9,]*”,“”,eduyears1994))[1]17 NA 17 17 12 NA 12 14 NA NA 17 12 12 17 NA 12 12 12 17 NA 14 17 NA 12 12 12 17[34]17 17 12 12 14 12 8 NA 12 8 17 NA 12 NA 17 8 NA 12 12 17 NA 14 NA 14 NA 12 NA 17 12我很惊讶你得到了所有这些
NA
值——在我的例子中,所有的东西都被转换了。你能展示
dput(教育年1994)
的结果吗?你能解释一下为什么会有“2”这样的标签吗(由于我不理解的原因,这相当于8年)混合了文本标签,如“17 lat”?很抱歉延迟。我认为数据被指定为标称值,而不是数字,R读取它I
vec <- c("17 lat/9","10 lat/3,4","10 lat/3,4","17 lat/9","17 lat/9","12 lat/5,6","10 lat/3,4","10 lat/3,4","12 lat/5,6")
x <- strsplit(vec,split=" lat/",fixed=TRUE)
sapply(x,function(x)as.integer(x[1]))
# [1] 17 10 10 17 17 12 10 10 12