使用第一个数字作为因子来标准化R中的值

时间:2017-03-07 20:41:11

标签: r

我从调查中得到大数据框tocalculate(原始数据框brfss2013,其中一个变量代表一个人检查血糖水平的次数。数据为3位数:< / p>

第一个数字告诉您测量是每天(1),每周(2),每月(3)还是每年(4)。第二个和第三个数字代表实际值。

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

我希望标准化所有内容以获得每年的价值。所以我会将第2和第3位乘以365,52.143,12和1(天,周,月,年)。

我想我能够选择&#34;要使用的数字,但我不确定如何编写可以使用不同指令集处理不同行的内容。

编辑:

添加我的尝试和示例数据。

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值但是......

3 个答案:

答案 0 :(得分: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列(或合并定义,以便从不创建它。)

答案 1 :(得分:2)

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

答案 2 :(得分: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为数字,以便进一步操作和分析。