我在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))
答案 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