这是我当前拥有的结构的 dput() 。
structure(list(id = c(1, 1, 2, 4, 4), country = c("USA", "Japan", "Germany", "Germany", "USA"), USA = c(0, 0, 0, 0, 0), Germany = c(0, 0, 0, 0, 0), Japan = c(0, 0, 0, 0, 0)), class = "data.frame", row.names = c(NA, -5L))
我想编辑此数据框以获得以下结果,以便将此方法应用于具有 100k 以上观察值的数据集。具体来说,我想使用来自(df$country
)描述分配给特定 ID 的国家(例如,id == 1
and country == Japan
),并将相应列名(例如,名为“Japan”的列)的列值更改为 1。请注意,ID 不是唯一的!
这就是我想要的结果:
structure(list(id = c(1, 1, 2, 4, 4), country = c("USA", "Japan", "Germany", "Germany", "USA"), USA = c(1, 1, 0, 1, 1), Germany = c(0, 0, 1, 1, 1), Japan = c(1, 1, 0, 0, 0)), class = "data.frame", row.names = c(NA, -5L))
以下代码给出了接近的结果:
df[levels(factor(df$country))] = model.matrix(~country - 1, df)
但最终给了我以下内容,错误结构:
structure(list(id = c(1, 1, 2, 4, 4), country = c("USA", "Japan",
"Germany", "Germany", "USA"), USA = c(1, 0, 0, 0, 1), Germany = c(0,
0, 1, 1, 0), Japan = c(0, 1, 0, 0, 0)), row.names = c(NA, -5L
), class = "data.frame")
如何编辑上述命令以获得我想要的结果?我不能使用枢轴因为实际上,我正在处理许多在“国家/地区”列中具有不同值的数据集,这些数据集一旦旋转,将产生具有不均匀列/结构的数据集,这将阻碍以后的数据分析。
感谢您的任何帮助!