r- dummyVars中的重复行

时间:2018-12-06 21:14:22

标签: r dataframe r-caret dummy-variable dummy-data

我在R中有一个数据框,这里有一个例子

asdf <- data.frame(id = c(2345, 7323, 2345, 4533),
               place = c("Home", "Home", "Office", "Office"),
               sex = c("Male", "Male", "Male", "Female"),
               consumed = c(1000, 800, 1000, 500))

您会看到有一个ID重复,因为他有两个位置,分别是家庭和办公室。我想将每个字符变量转换为一个虚拟变量,并仅获取一个id,而没有重复的id。我确信唯一重复的值可以是“位置”变量。

当我从插入符号中应用dummyVars时,我无法执行此操作,例如,当我应用以下内容时,对于我来说,这种行为是没有道理的

dummy <- dummyVars( ~ ., data = asdf, fullRank = FALSE, levelsOnly = TRUE)
predict(dummy, asdf)

我得到以下具有重复ID的数据框

result <- data.frame(id = c(2345, 7323, 2345, 4533),
                 placeHome = c(1, 1, 0, 0),
                 placeOffice = c(0, 0, 1, 1),
                 sexFemale = c(0, 0, 0, 1),
                 sexMale = c(1, 1, 1, 0),
                 consumed = c(1000,  800, 1000,  500))

但是我想要这个

sexy_result <- data.frame(id = c(2345, 7323, 4533),
                 placeHome = c(1, 1, 0),
                 placeOffice = c(1, 0, 1),
                 sexFemale = c(0, 0, 1),
                 sexMale = c(1, 1, 0),
                 consumed = c(1000,  800, 500))

1 个答案:

答案 0 :(得分:1)

您可以使用 dplyr 包来转换结果数据框。

library(dplyr)
sexy_result <- result %>% group_by(id) %>% summarise_all(sum)
data.frame(sexy_result)

   id    placeHome  placeOffice sexFemale sexMale consumed
1 2345         1           1         0       2     2000
2 4533         0           1         1       0      500
3 7323         1           0         0       1      800

如果只想汇总 placeHome placeOffice ,则可以使用以下代码

sexy_result <- result %>% group_by(id) %>% summarise(placeHome=sum(placeHome), placeOffice=sum(placeOffice), sexFemale=mean(sexFemale), sexMale=mean(sexMale), consumed=mean(consumed))
data.frame(sexy_result)

   id     placeHome  placeOffice sexFemale sexMale consumed
1 2345         1           1         0       1     1000
2 4533         0           1         1       0      500
3 7323         1           0         0       1      800