【发布时间】:2020-01-14 04:45:59
【问题描述】:
我查看了What is the difference between as.tibble(), as_data_frame(), and tbl_df()? 的讨论以了解为什么replace_na 函数(如下所示)适用于数据帧而不适用于小标题。你能帮我理解为什么它在小标题上不起作用吗?如何修改函数以使其同时适用于data.frame 和tibble?
数据
library(dplyr)
#dput(df1)
df1 <- structure(list(id = c(1, 2, 3, 4), gender = c("M", "F", NA, "F"
), grade = c("A", NA, NA, NA), age = c(2, NA, 2, NA)), row.names = c(NA,
-4L), class = c("tbl_df", "tbl", "data.frame"))
#dput(df2)
df2 <- structure(list(id = c(1, 2, 3, 4), gender = c("M", "F", "M",
"F"), grade = c("A", "A", "B", "NG"), age = c(22, 23, 21, 19)), row.names = c(NA,
-4L), class = c("tbl_df", "tbl", "data.frame"))
替换函数
replace_na <- function(df_to, df_from) {
replace(df_to, is.na(df_to), df_from[is.na(df_to)])
}
用法
replace_na(df1,df2)
错误:必须使用
[中的向量,而不是类矩阵的对象。致电
rlang::last_error()查看回溯调用自:abort(error_dim_column_index(j))
但是;将arglist 强制转换为数据帧会产生所需的输出,如下所示。
replace_na(as.data.frame(df1), as.data.frame(df2))
# id gender grade age
# 1 1 M A 2
# 2 2 F A 23
# 3 3 M B 2
# 4 4 F NG 19
谢谢。
【问题讨论】: