r - 基于唯一列交互的虚拟变量

标签 r

我有以下数据并希望创建 $ID两列之间每个独特交互的变量

DATE <- c('V', 'V', 'W', 'W', 'X', 'X', 'Y', 'Y', 'Z', 'Z')
SEX <- rep(1:2, 5)
Blood_T1 <- c(3,4,3,3,4,3,1,6,3,4)
Blood_T2 <- c(4,3,3,3,3,4,6,1,4,3)
df1 <- data.frame(DATE, SEX, Blood_T1, Blood_T2)

$DATE分组时,我想为 $Blood_T1 的每个独特组合创建一个新的虚拟变量和$Blood_T2无论他们的顺序如何。

所需的输出如下所示:

enter image description here

我不能使用总和,因为它并不总是产生唯一的组合。 (请参阅上面以黄色标记的部分以进行说明)

我已经尝试过以下命令,但还没有击中要害

with(df1, interaction(Blood_T1, Blood_T2))
as.numeric(as.factor(with(df1, paste(Blood_T1, Blood_T2))))
transform(df1, Cluster_ID = as.numeric(interaction(Blood_T1, Blood_T2, drop=TRUE)))

最佳答案

您实际上可以对各个对($Blood_T1$Blood_T2)进行排序,并将它们粘贴在一起,这已经是一种 ID

apply(df1, 1, function(x) paste(sort(x[3:4]), collapse = ""))
#[1] "34" "34" "33" "33" "34" "34" "16" "16" "34" "34"

如果想进一步减少,可以将其当做一个因子,获取数值

as.numeric(as.factor(apply(df1, 1, function(x) paste(sort(x[3:4]), collapse = ""))))
#[1] 3 3 2 2 3 3 1 1 3 3

如果有必要,您也可以输入DATE

apply(df1, 1, function(x) paste(sort(x[c(1,3:4)]), collapse = ""))
#[1] "34V" "34V" "33W" "33W" "34X" "34X" "16Y" "16Y" "34Z" "34Z"

关于r - 基于唯一列交互的虚拟变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42279343/

相关文章:

r - 在 R : reorder the rows of a dataframe based on those in another table 中

r - apply.monthly 给出该月最后一次观察的日期,而不是该月的最后一天

r - 如何告诉 R 在 Windows 中使用代理自动配置脚本 (PAC)

r - 如何将模型保存为带循环的矢量?

r - 在 R 控制台中编辑或查看数据框

r - 拆分单元格中的值并添加到 R 中新创建的行

r - 根据第一列的日期和时间添加第二列的值

r - 如何从一个 S4 类中提取值(value)

r - 为什么 write.xlsx2 不存储不同的电子表格?

xml - 通过 R 中的 Xpath 从 xml 文件中的节点获取值