【问题标题】:Cut a variable based on another variable - R根据另一个变量剪切一个变量 - R
【发布时间】:2017-11-20 08:50:34
【问题描述】:

我的数据框中有两个变量,例如 BloodSugarTestType、BloodSugarReading。测试类型可以有三个值 - 'Fasting'、'Random'、'PostPrandial'。现在基于 BloodSugarTestType,我需要将 BloodSugarReading 分类为不同的范围。

我正在尝试这样:

DBRiskProfiling.Data[DBRiskProfiling.Data$bld_sgr_ctgry=='Fasting', c('bld_sgr')] <- cut(DBRiskProfiling.Data[DBRiskProfiling.Data$bld_sgr_ctgry=='Fasting', "bld_sgr"], breaks=c(0, 126, 500))

谁能帮助如何使用剪切功能做到这一点?

示例:TestType - 禁食
血糖读数类别 - (0, 126], (126, 300] ##这些是水平

TestType - 随机
血糖读数类别 - (0, 126], (126, 200], (200, 300] ##这些是水平

What I have is left side table, What I want is right side table。抱歉,我无法解释清楚。

【问题讨论】:

  • 不好意思……我得到了我想要的。感谢所有试图提供帮助的人。

标签: r


【解决方案1】:

你的描述不是很清楚,但我猜你的意思是这样的(我不认为你想要的可以通过cut() 实现):

# first, create a variable with informative string values for each category (assuming df is your data.frame)
df$reading_cat <- "f1"

df$reading_cat[df$testType == "Fasting" & df$reading > 127] <- "f2"
df$reading_cat[df$testType == "Random" & df$reading < 127] <- "r1"
df$reading_cat[df$testType == "Random" & df$reading >= 127 & df$reading < 201] <- "r2"
df$reading_cat[df$testType == "Random" & df$reading >= 201] <- "r3"

[...and so on for other categories...]

# then recode as factor to assign the labels you want
df$reading_cat <- recode(df$reading_cat, "'f1' = '(0, 126]'; 'f2' = '(126, 200]'; 'r1' = '(0, 126]'; 'r2' = '(126, 200]'; 'r3' = [...]")

一些注意事项。您将能够将此变量用作有序因子,因为您有重叠的类别,因此,对于任何分析,您都必须指定自定义对比。

【讨论】: