r - 如何替换数据框列表中的单个值
问题描述
我有一个数据框列表如下:
dat_1 <- data.frame(x = c("A", "B", "C", "D") %>% as.factor)
dat_2 <- data.frame(x = c("A", "B", "C", "D") %>% as.character)
dat <- list("dat_1" = dat_1, "dat_2" = dat_2)
有些列是因子,有些是字符。对于列表中的所有数据帧,我需要用 NA 替换任何“C”实例。我将如何做到这一点?
我知道我可以使用以下代码完成此操作,但如果可能,我想避免对列表中的每个数据帧进行硬编码:
dat[["dat_2"]][dat[["dat_2"]] == "C"] <- NA
解决方案
首先,您创建数据框的方式将导致数据框的列成为所有因素。我将您的代码修改如下,使第一个数据框成为因子,第二个数据框成为字符。
dat_1 <- data.frame(x = c("A", "B", "C", "D"))
dat_2 <- data.frame(x = c("A", "B", "C", "D"), stringsAsFactors = FALSE)
dat <- list("dat_1" = dat_1, "dat_2" = dat_2)
我们可以使用以下代码将所有“C”替换为NA
.
dat2 <- lapply(dat, function(x){
x[] <- lapply(x, function(x) replace(x, x %in% "C", NA))
return(x)
})
dat2
# $dat_1
# x
# 1 A
# 2 B
# 3 <NA>
# 4 D
#
# $dat_2
# x
# 1 A
# 2 B
# 3 <NA>
# 4 D
该代码不会更改列类型。
lapply(dat2, function(x) sapply(x, class))
# $dat_1
# x
# "factor"
#
# $dat_2
# x
# "character"
推荐阅读
- python - 循环时间到前 15 分钟,除非在 10 分钟内
- dart - Flutter run --release crash: 在抛出 std::bad_alloc 的实例后调用终止
- python - 使用 Python 修改 JSON 文件
- javascript - Javascript/jQuery:从活动目录读取数据
- android - 当前使用哪种布局横向或纵向?
- python - Visual Studio Code (Mac OS) 重命名符号不起作用
- amazon-web-services - AWS lambda 提取大数据并上传到 s3
- javascript - -c 标志在 NodeJS 中的作用是什么?
- java - 当我们在实体中使用最终字段时?
- sql - 如何在 MS Access SQL 上选择最多两列并按站分组