R 如何使用dcast()函数保持NA值? df
在第一个示例中,未调用R 如何使用dcast()函数保持NA值? df,r,R,在第一个示例中,未调用fun.aggregate,但在第二个示例中,更改是调用fun.aggregate。根据?dcast r <- read.csv("ratings.csv") m <- read.csv("movies.csv") rm <- merge(ratings, movies, by="movieId") umr <- dcast(rm, userId ~ title, value.var = "rating", fun.aggregate= sum)
fun.aggregate
,但在第二个示例中,更改是调用fun.aggregate
。根据?dcast
r <- read.csv("ratings.csv")
m <- read.csv("movies.csv")
rm <- merge(ratings, movies, by="movieId")
umr <- dcast(rm, userId ~ title, value.var = "rating", fun.aggregate= sum)
fill-用于填充结构缺失的值,默认为将fun.aggregate应用到0长度向量的值
请注意,这里的每个组合只有一个元素,因此和将返回相同的值,但如果不存在特定组合,则返回0。它基于sum
dcast(df, x ~ y, value.var = "z", fun.aggregate = NULL)
# x A B C D
#1 1 3 2 1 NA
#2 2 4 2 NA NA
#3 3 3 2 NA 1
#4 4 NA 2 NA NA
#5 5 NA NA 3 4
dcast(df, x ~ y, value.var = "z", fun.aggregate = sum)
# x A B C D
#1 1 3 2 1 0
#2 2 4 2 0 0
#3 3 3 2 0 1
#4 4 0 2 0 0
#5 5 0 0 3 4
或者,当所有元素都是NA
时,如果我们使用NA.rm
,将没有任何元素可求和,那么它也将进入整数(0)
模式
length(integer(0))
#[1] 0
sum(integer(0))
#[1] 0
sum(NULL)
#[1] 0
如果我们使用hablar
中的sum\uu
,此行为将更改为返回NA
sum(c(NA, NA), na.rm = TRUE)
#[1] 0
library(hablar)
sum_(c(NA, NA))
#[1] NA
一个选项是在fun.aggregate
中创建一个条件以返回NA
sum(c(NA, NA), na.rm = TRUE)
#[1] 0
library(hablar)
sum_(c(NA, NA))
#[1] NA
有关如何创建sum
(基本函数)的更多信息,请查看源代码
dcast(df, x ~ y, value.var = "z",
fun.aggregate = function(x) if(length(x) == 0) NA_real_ else sum(x, na.rm = TRUE))
# x A B C D
#1 1 3 2 1 NA
#2 2 4 2 NA NA
#3 3 3 2 NA 1
#4 4 NA 2 NA NA
#5 5 NA NA 3 4