2017-03-07 125 views
2

我从一项调查中获得大数据框tocalculate(原始数据框brfss2013其中一个变量表示一个人检查血糖水平的次数数据为3位数字:使用第一位数作为标准化R值的因子

第一个数字告诉你,如果测量是根据天(1),每周(2),每月(3)或每年(4)的第二和第三位代表的实际价值

示例:101每天(_ _)一次(_01),202每周两次,等等。

我想标准每件事都可以获得每年的时间价值。所以我会将第2,3位数字乘以365,52.143,12和1(天,周,月,年)。

我想我可以“选择”要使用的数字,但我不知道如何编写可以使用不同行的不同指令集合的东西。

编辑:

添加我的尝试和样本数据。

tocalculate <- brfss2013 %>% 
    filter(nchar(bldsugar) > 2) 

bldsugar2 <- sapply(tocalculate$bldsugar, function(x) { 
    if (substr(x,1,1) == 1) {x*365} 
    if (substr(x,1,1) == 2) {x*52} 
    if (substr(x,1,1) == 3) {x*12} 
    if (substr(x,1,1) == 4) {x*365} 
}) 

我得到了很多,虽然NULL值的...

+0

请提供一些明确的示例数据并显示您的尝试到目前为止。这听起来像你可以使用'因子'与每个数字的自定义'标签'参数,然后'粘贴'所有在一起... – Gregor

回答

3

既然你已经在使用dplyrrecode是一个方便的功能。我用%/%看看100多少次去到每个bldsugar价值和%%获取余时100

# sample data 
brfss_sample = data.frame(bldsugar = c(101, 102, 201, 202, 301, 302, 401, 402)) 

library(dplyr) 
mutate(
    brfss_sample, 
    mult = recode(
     bldsugar %/% 100, 
     `1` = 365.25, 
     `2` = 52.143, 
     `3` = 12, 
     `4` = 1 
    ), 
    checks_per_year = bldsugar %% 100 * mult 
) 
# bldsugar mult checks_per_year 
# 1  101 365.250   365.250 
# 2  102 365.250   730.500 
# 3  201 52.143   52.143 
# 4  202 52.143   104.286 
# 5  301 12.000   12.000 
# 6  302 12.000   24.000 
# 7  401 1.000   1.000 
# 8  402 1.000   2.000 

分你可以,当然,除去mult列(或合并的定义,以便它从来没有创造过)。

+0

我喜欢你在一年365天内添加0.25,你的解决方案很好 – jesusgarciab

+0

哈!我以为你有'.25'。我以为你有,因为我记得你有52.143。 – Gregor

2
#Data 
set.seed(42) 
x = sample(101:499, 100, replace = TRUE) 
#1st digit 
as.factor(floor((x/100))) 
#Values 
((x/100) %% 1) * 100 
+0

这看起来不错,但我不知道我是否了解'floor()'的工作方式即使在阅读文档之后,所以我不确定我是否可以正确实施 – jesusgarciab

+1

我想我明白了......基本上它是用来给你“舍入”你的分数? – jesusgarciab

+1

@jesusgarciab yes - 'floor'向下,'ceiling'向上,'trunc'向0转。('trunc'与正数的'floor'相同,负数的'ceiling'相同) 。当然,'圆形'走向最近。 – Gregor

0

也许你可以做的第一件事是将3位数的变量分成两个变量。第一个变量只有一位数字,表示采样频率;第二个变量显示测量的时间。

在R中,substrsubstring可以通过指定子集的第一个和最后一个位置来选择字符串。

# Create example data frame 
ex_data <- data.frame(var = c("101", "202", "204")) 

# Split the variable to create two new columns 
ex_data$var1 <- substring(ex_data$var, first = 1, last = 1) 
ex_data$var2 <- substring(ex_data$var, first = 2, last = 3) 

# Remove the original variable 
ex_data$var <- NULL 

之后,你可以操纵你的数据框。也许将var1转换为因子,并将var2转换为数字以用于进一步的操作和分析。