我有一个数据帧,其中有三个因素,其中两个是二进制,第三个是整数:
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/