我有一个包含三个因子的数据框,其中两个是二进制的,第三个是整数:
DATA YEAR1 YEAR2 REGION1 REGION2
OBS1 X 1 0 1 0
OBS2 Y 1 0 0 1
OBS3 Z 0 1 1 0
等等
现在我想把它改成这样
YEAR1_REGION1 YEAR1_REGION2 YEAR2_REGION1 YEAR2_REGION2
OBS1 X 0 0 0
OBS2 0 Y 0 0
OBS3 0 0 Z 0
基本矩阵乘法不是我想要的。我想找到一种巧妙的方法来执行此操作,该方法也会自动重命名列。我的实际数据具有三个因子维度和 20*8*6 个观察值,因此最终总共会有 960 列。
最佳答案
这是另一种基于 outer
的方法,类似于@Roland 的回答。
year <- grep("YEAR", names(DF), value = TRUE)
region <- grep("REGION", names(DF), value = TRUE)
data <- as.character(DF$DATA)
df <- outer(year, region, function(x, y) DF[,x] * DF[,y])
colnames(df) <- outer(year, region, paste, sep = "_")
df <- as.data.frame(df)
for (i in seq_len(ncol(df)))
df[as.logical(df[,i]), i] <- data[as.logical(df[,i])]
df
## YEAR1_REGION1 YEAR2_REGION1 YEAR1_REGION2 YEAR2_REGION2
## OBS1 X 0 0 0
## OBS2 0 0 Y 0
## OBS3 0 Z 0 0
关于r - 如何在 R 中为多个维度构建二进制 data.frame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20949398/