[英]Replace Column Values of dataframe based List of Dataframes
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)
我想評估一個 dfs 列表以更改 df1 中的值。 需要對df1
列使用list.1
中 df 的名稱
輸出:
df1
cat dog mouse
1 4 3
3 4 1
3 2 2
2 4 3
一個基本的R
選項,假設 list.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
您可以將match
用於更新 join 。
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
使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.