【发布时间】:2017-11-10 12:40:31
【问题描述】:
我有数据,这是一个小样本:
df <- structure(list(`d955` = c("1", "4", NA, NA),
`65c2` = c("6a08", NA, "6a08", "6a09")),
class = c("tbl_df", "tbl", "data.frame"),
row.names = c(NA, -4L), .Names = c("d955", "65c2"))
# A tibble: 4 x 2
# d955 `65c2`
# <chr> <chr>
# 1 1 6a08
# 2 4 <NA>
# 3 <NA> 6a08
# 4 <NA> 6a09
两列都是字符类型。我想将仅包含从 1 到 5 的数字的所有列的列类型更改为整数。我知道我可以亲自挑选列来执行此操作,但由于列会不断变化,这不是一个令人满意的选择。
那么如何自动执行此操作?我一直在从dplyr 包中查看mutate_if,但我不知道如何选择正确的列开始。
我一直在研究str_detect,它可能会起作用,但像str_detect(df, "[1234]") 这样的东西也会匹配65c2 行中数字在1-4 之间的字符串。我一直在寻找str_count 的解决方案,因为整数的计数始终为 1,但我没有找到基于字符串计数条件选择列的好解决方案...
所需的自动化结果:
# A tibble: 4 x 2
# d955 `65c2`
# <int> <chr>
# 1 1 6a08
# 2 4 <NA>
# 3 <NA> 6a08
# 4 <NA> 6a09
【问题讨论】:
-
一直在尝试将
charcount <- function(x) (str_count(x) == 1)与users.matrix %>% mutate_if(charcount, as.integer)结合使用的tidyverse 方法。那行不通,但我想这也是一条可能的路线……