我有一个带有特殊列a
的data.frame。此列可以是数字,也可以是告诉我查看列b
的SPECIAL值。
foo <- tibble(
a=c("15", "20", "SPECIAL", "13"),
b=c(NA, NA, 32, NA)
)
如果我可以使用dplyr
foo %>%
mutate(
a=ifelse(a == "SPECIAL",
b,
as.numeric(a)
)
)
看起来不错,阅读也不错。不幸的是,ifelse(test, yes, no)
同时评估了yes
和no
参数。当然,as.numeric(a)
会警告SPECIAL
。
ifelse
是否有其他选择可以首先自动拆分data.frame?我想避免评估as.numeric(a)
注意:进行编辑以使问题更清楚
答案 0 :(得分:1)
tidyr::separate
将在这里工作
foo <- tibble(
a=c("15", "20", "3x10", "13")
)
foo %>%
separate(a, into = c("a", "new_col"), sep = "x")
# A tibble: 4 x 2
a new_col
<chr> <chr>
1 15 NA
2 20 NA
3 3 10
4 13 NA
答案 1 :(得分:0)
sapply(strsplit(foo$a, "x"), function(x) {prod(as.numeric(x))})
以dplyr::
语法:
foo %>%
mutate( a = sapply(strsplit(a, "x"), function(x) {prod(as.numeric(x))}) )
# A tibble: 4 x 1
# a
# <dbl>
#1 15
#2 20
#3 30
#4 13