簡體   English   中英

r- dummyVars中的重復行

[英]r- Duplicated rows in dummyVars

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

您可以使用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

如果只想對placeHomeplaceOffice求和 ,則可以使用以下代碼

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM