dfs की सूची:

catbehave <- c("Good", "Cute", "Evil")
catnum <- c(1, 2, 3)
dogbehave <- c("Goodboi", "Cute")
dognum <- c(4, 2)
mousebehave <- c("Evil", "Good", "Cute")
mousenum <- c(3, 1, 2)

cat <- as.data.frame(cbind(catbehave, catnum))
dog <- as.data.frame(cbind(dogbehave, dognum))
mouse <- as.data.frame(cbind(mousebehave, mousenum))


list.1 <- list(cat = cat,dog = dog,mouse = mouse)

df1:

cat <- c("Good", "Evil", "Evil", "Cute")
dog <- c("Goodboi", "Goodboi", "Cute", "Goodboi")
mouse<- c("Evil", "Good", "Cute", "Evil")
df1 = data.frame(cat, dog, mouse)

मैं df1 में मान बदलने के लिए dfs की एक सूची का मूल्यांकन करना चाहता हूं। df1 में कॉलम के लिए list.1 में df's के नाम का उपयोग करने की आवश्यकता है

आउटपुट:

df1

cat  dog  mouse
1    4    3
3    4    1
3    2    2
2    4    3
r
3
gojomoso 25 अगस्त 2020, 17:32

3 जवाब

सबसे बढ़िया उत्तर

आप अपडेट जॉइन के लिए match का उपयोग कर सकते हैं।

for(i in names(df1)) {
   df1[,i] <- list.1[[i]][match(df1[,i], list.1[[i]][,1]), 2]
}
df1
#  cat dog mouse
#1   1   4     3
#2   3   4     1
#3   3   2     2
#4   2   4     3
1
GKi 25 अगस्त 2020, 17:42

tidyverse का उपयोग करके हम ऐसा कर सकते हैं

library(dplyr)
library(tibble)
library(purrr)
map2_dfc(df1, list.1, ~ deframe(.y)[.x])
# A tibble: 4 x 3
#  cat   dog   mouse
#  <chr> <chr> <chr>
#1 1     4     3    
#2 3     4     1    
#3 3     2     2    
#4 2     4     3    
1
akrun 25 अगस्त 2020, 19:31

एक आधार R विकल्प, सूची 1 मानते हुए और df1 में कुछ क्रम है:

df1[] <- mapply(
  function(x, y) x[y],
  lapply(list.1, function(x) setNames(x[[2]], x[[1]])),
  df1
)
df1

#   cat dog mouse
# 1   1   4     3
# 2   3   4     1
# 3   3   2     2
# 4   2   4     3
2
sindri_baldur 25 अगस्त 2020, 17:39