将dataframe列中的值替换为keyvalue查找中的值

时间:2018-07-30 00:02:20

标签: r

我想用查询表中的值替换数据框列中的某些值。我在列表中有值,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语法令我着迷。

2 个答案:

答案 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]))