我想用查询表中的值替换数据框列中的某些值。我在列表中有值,stuff.kv,许多值存储在列表中(但有些可能不是)。
stuff.kv <- list()
stuff.kv[["one"]] <- "thing"
stuff.kv[["two"]] <- "another"
#etc
我有一个数据框df,它有多个列(例如20个),名称各不相同。我想用“ lookup”中的值替换“ stuff”列中的内容。
我尝试构建各种应用方法,但没有任何效果。
我构建了一个函数,该函数处理项目列表并返回变异列表,
stuff.lookup <- function(x) {
for( n in 1:length(x) ) {
if( !is.null( stuff.kv[[x[n]]] ) ) x[n] <- stuff.kv[[x[n]]]
}
return( x )
}
unlist(lapply(df$stuff, stuff.lookup))
apply语法令我着迷。
答案 0 :(得分:2)
由于您创建了一个非常漂亮的查找表,因此您可以使用它来更改值。无需循环或应用。
## Sample Data
set.seed(1234)
DF = data.frame(stuff = sample(c("one", "two"), 8, replace=TRUE))
## Make the change
DF$stuff = unlist(stuff.kv[DF$stuff])
DF
stuff
1 thing
2 another
3 another
4 another
5 another
6 another
7 thing
8 thing
答案 1 :(得分:0)
下面是一个基于@ G5W答案的更通用的解决方案,因为它没有涵盖原始数据帧的值在查找表中不存在的情况(这将导致长度不匹配错误):>
library(dplyr)
stuff.kv <- list(one = "another", two = "thing")
df <- data_frame(
stuff = rep(c("one", "two", "three"), each = 3)
)
df <- df %>%
mutate(stuff = paste(stuff.kv[stuff]))