簡體   English   中英

根據其他多個列上的值(為ifelse替代)將值分配給變量

[英]Assign value to variable based on values on multiple other columns (alternative to ifelse)

我有一個描述大量人員的數據框。 我想根據幾個變量將每個人分配到一個組中。 例如,假設我有帶有5個州的變量“州”,帶有4個組的變量“年齡組”和帶有5個組的變量“收入”。 我將有5x4x5 = 100個組,我想用從1到100的數字來命名。過去我一直使用ifelse語句的組合來完成此操作,但是現在我有100個可能的結果,我想知道是否有比手動指定每個組合更快的方法。

這是具有預期結果的MWE:

mydata <- as.data.frame(cbind(c("FR","UK","UK","IT","DE","ES","FR","DE","IT","UK"),
 c("20","80","20","40","60","20","60","80","40","60"),c(1,4,2,3,1,5,5,3,4,2)))
colnames(mydata) <- c("Country","Age","Income")

group_grid <- transform(expand.grid(state = c("IT","FR","UK","ES","DE"), 
       age = c("20","40","60","80"), income = 1:5), val = 1:100)

desired_result <- as.data.frame(cbind(c("FR","UK","UK","IT","DE","ES","FR","DE","IT","UK"),

                                      c("20","80","20","40","60","20","60","80","40","60"),
                                      c(1,4,2,3,1,5,5,3,4,2),
                                      c(2,78,23,46,15,84,92,60,66,33)))

colnames(desired_result) <- c("Country","Age","Income","Group_code")

mydata$Group_code <- with(mydata, as.integer(interaction(Country, Age, Income)))應該這樣做。

這是使用dplyr left_join選項

library(dplyr)
grpD <- group_grid %>% 
            mutate_if(is.factor, as.character) %>% #change to character class as joining
            mutate(income = as.character(income))#with same class columns are reqd.
mydata %>%
      mutate_if(is.factor, as.character) %>%  #change class here too
      left_join(., grpD, by= c("Country" = "state", "Age" = "age", "Income" = "income"))
#    Country Age Income val
#1       FR  20      1   2
#2       UK  80      4  78
#3       UK  20      2  23
#4       IT  40      3  46
#5       DE  60      1  15
#6       ES  20      5  84
#7       FR  60      5  92
#8       DE  80      3  60
#9       IT  40      4  66
#10      UK  60      2  33

暫無
暫無

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

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