首页 > 解决方案 > 在 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为:bcde

df %>% lapply(., plyr::mapvalues(, c("a","b","c","d","e"), c(5,4,3,2,1)))

但它不起作用:我收到一条警告,它缺少 function 的第一个参数mapvalues()。有谁知道我做错了什么?

标签: rdataframeapplylapplydata-manipulation

解决方案


使用的语法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

推荐阅读