Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.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_Tidyverse - Fatal编程技术网

R 通过计算字符列的平均值将其转换为数字类型

R 通过计算字符列的平均值将其转换为数字类型,r,tidyverse,R,Tidyverse,我有字符类型的age列。如何将列age中的所有age\u char替换为对应的\u age\u num 谢谢 library(tidyverse) countries <- c("America", "Brazil", "Canada", "Denmark", "England", "France") age <- c("70 to 75",

我有字符类型的
age
列。如何将列
age
中的所有
age\u char
替换为
对应的\u age\u num

谢谢

library(tidyverse)

countries <- c("America", "Brazil", "Canada", "Denmark", "England", "France")
age <- c("70 to 75", "unknown", "75 to 80", "70 to 75", "80 and above", "75 to 80")

tbl <- tibble(countries, age)

age_char <- unique(tbl$age)

correponding_age_num <- (72.5, 50, 77.5, 85)



库(tidyverse)

国家如果我们在“to”处进行拆分以创建两个数字列,那么我们可以进行平均

library(tidyr)
library(stringr)  
tbl %>%
   separate(age, into = c('age1', 'age2'), sep = '\\s+to\\s+|[^0-9]+',
       convert = TRUE, remove = FALSE) %>%
   transmute(countries, age, age_mean = case_when(str_detect(age, 
                'and above') ~  age1 + 5, TRUE ~ (age1 + age2)/2)) 
-输出

# A tibble: 6 x 3
#  countries age          age_mean
#  <chr>     <chr>           <dbl>
#1 America   70 to 75         72.5
#2 Brazil    unknown          NA  
#3 Canada    75 to 80         77.5
#4 Denmark   70 to 75         72.5
#5 England   80 and above     85  
#6 France    75 to 80         77.5

如果我们在“to”处进行拆分以创建两个数字列,则可以进行平均

library(tidyr)
library(stringr)  
tbl %>%
   separate(age, into = c('age1', 'age2'), sep = '\\s+to\\s+|[^0-9]+',
       convert = TRUE, remove = FALSE) %>%
   transmute(countries, age, age_mean = case_when(str_detect(age, 
                'and above') ~  age1 + 5, TRUE ~ (age1 + age2)/2)) 
-输出

# A tibble: 6 x 3
#  countries age          age_mean
#  <chr>     <chr>           <dbl>
#1 America   70 to 75         72.5
#2 Brazil    unknown          NA  
#3 Canada    75 to 80         77.5
#4 Denmark   70 to 75         72.5
#5 England   80 and above     85  
#6 France    75 to 80         77.5
库(tidyverse)
国家
图书馆(tidyverse)

国家非常感谢你。有时,年龄写为“80岁及以上”或“未披露”。我可以使用unique(tbl$age)检查所有unique值。是否有一种方法可以创建所需值的单独数组,并以某种方式映射到唯一值。例如-唯一值为c(“70-75”、“75-80”、“未知”)。我们创建一个数组c(72.5,77.5,50),并使用它替换所有字符values@SiD你能试试更新吗。我不确定你在原始数据中有什么样的模式我编辑这个questions@SiD这将是伟大的,请编辑与所有的模式谢谢你非常akrun。有时,年龄写为“80及以上”或“未披露”。我可以使用unique(tbl$age)检查所有unique值。是否有一种方法可以创建所需值的单独数组,并以某种方式映射到唯一值。例如-唯一值为c(“70-75”、“75-80”、“未知”)。我们创建一个数组c(72.5,77.5,50),并使用它替换所有字符values@SiD你能试试更新吗。我不确定你在原始数据中有什么样的模式我编辑这个questions@SiD这将是伟大的,请编辑与所有的模式