r - 在 R 中使用 lapply 时缺少参数
问题描述
我有以下数据框:
set.seed(1)
df <- data.frame(X1 = sample(c(letters[1:5],NA),10,replace=TRUE),
X2 = sample(c(letters[1:5],NA),10,replace=TRUE),
X3 = sample(c(letters[1:5],NA),10,replace=TRUE),
stringsAsFactors = FALSE)
X1 X2 X3
1 b b <NA>
2 c b b
3 d e d
4 <NA> c a
5 b e b
6 <NA> c c
7 <NA> e a
8 d <NA> c
9 d c <NA>
10 a e c
我想将 5、4、3、2和1替换a
为:b
c
d
e
df %>% lapply(., plyr::mapvalues(, c("a","b","c","d","e"), c(5,4,3,2,1)))
但它不起作用:我收到一条警告,它缺少 function 的第一个参数mapvalues()
。有谁知道我做错了什么?
解决方案
使用的语法lapply
略有不同。下面是它的工作原理:
df %>% lapply(plyr::mapvalues, from = c("a","b","c","d","e"), to = c(5,4,3,2,1))
$X1
[1] "1" "3" "3" "1" "1" "2" "4" "5" NA "2"
$X2
[1] "2" "1" NA "3" "1" "5" "3" "2" NA NA
$X3
[1] "3" "3" NA "1" NA "1" "1" "2" NA "2"
如果您之后仍然想拥有一个数据框,最好使用apply
而不是lapply
:
df %>% apply(2, plyr::mapvalues, from = c("a","b","c","d","e"), to = c(5,4,3,2,1)) %>%
as.data.frame(stringsAsFactors = F)
X1 X2 X3
1 4 4 <NA>
2 3 4 4
3 2 1 2
4 <NA> 3 5
5 4 1 4
6 <NA> 3 3
7 <NA> 1 5
8 2 <NA> 3
9 2 3 <NA>
10 5 1 3
推荐阅读
- java - 如何最小化war文件?
- py4j - 给定一个 `py4j.java_gateway.JavaObject` 是否可以保存并加载它?使用 Pickle 不起作用
- sql - Redshift 从表 B 中填充表 A 中的缺失行
- google-kubernetes-engine - 在 GCP 中从 repo 创建容器时没有指定分支名称的选项
- python - 使用 Flask-Mail 进行生产
- java - 使用 javamail 发送附件大小为 35mb 的电子邮件大约需要 1 分 30 秒才能接收
- numpy - NV12 到 YUV444 加速
- javascript - 具有多个系列和不规则间隔的折线图无法正确显示
- bash - 如何在 Bash 中验证 HTTP HMAC 签名?
- pytest - 如何将 Pytest-BDD 与 Playwright 结合使用