我遇到了R:
的问题让我们假设一个名为df的数据框,其中包含不同个体的信息(例如年龄,性别)和表示相应国家的变量。
现在,我想为每个人提供与国家一样多的行。关于每个人的每个添加行,不同个体(此处:年龄,性别)的信息应该相同。但是,每行应包含一个国家/地区名称。此外,还应包含一个虚拟变量,如果它是具有实际国家/地区的行,则取值为1。
换句话说,我们从一个包含个人及其国家信息的数据集开始。之后,对于每个人,每个国家都有一行和一个虚拟变量,表明哪一个是"正确的"国家。+
如果有5个人和5个国家:原始数据集应包含5行,转换后的数据集25(25 * 25)。
有一个很好的方法吗?
答案 0 :(得分:1)
您需要dummyVars
中的caret
功能。
http://topepo.github.io/caret/preprocess.html
答案 1 :(得分:1)
假设您的数据框名为df
,您的国家/地区变量为Country
。
以下内容将您的国家/地区变量转换为虚拟变量:
df1 <- data.frame(df,model.matrix(~df$Country+0))
那么重复每一行df1
五次(或者有多少次国家)就足够了吗?
df2 <- [rep(1:nrow(df1),length(unique(df$Country))),]
答案 2 :(得分:0)
非常感谢您的建议!最后,我找到了另一种方法来实现这一点:只需为所有观察添加一个变量(例如id)为1。然后使用包tidyr中的命令complete(数据,变量组合,fill = list(id = 0))