[英]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.