我有一个看起来像这样的功能
calc_df <- function(A_df, B_df){
C_df <- filter(A_df, Type == "Animal") %>%
left_join(B_df) %>%
as.numeric(C$Count)
如果我无法完成最后一次工作,前3个工作正常,但我希望最后一行从函数中计算的新df中取“Count”列并使其成为数字。 (现在它是一个字符向量)
**我必须在函数末尾执行此操作,因为在filter命令之前,Count列包含字母,不能将其设为.numeric
答案 0 :(得分:13)
您似乎正在使用dplyr
,并且想要更改或添加列。这就是dplyr::mutate
函数的作用。
替换
as.numeric(C$Count)
与
mutate(Count = as.numeric(Count))
使用强制替换替换旧的非数字Count
列。
至于为什么你的代码不起作用,有一些问题:
dplyr
用于处理数据帧,主要的dplyr函数(select,filter,mutate,summarize,group_by,* _join,...)期望数据帧作为第一个参数,然后返回数据帧。通过将左连接的结果汇总到as.numeric
,您实际上正在调用as.numeric(unnamed_data_frame_from_your_join, C$Count)
,这显然没有多大意义。
您正在尝试在名为C
的数据框的定义中引用名为C_df
的数据框,我认为您的意思是相同的。这里有两个问题:(1)名称C
和C_df
之间的不匹配,以及(2)您无法在其自己的定义中引用C_df
。