使用Tapply时参数必须具有相同的长度

时间:2019-08-13 08:58:08

标签: r dplyr

df_new['obs_date'] = pd.to_datetime(df_new['obs_date'], format='%m/%d/%Y', errors='coerce')
df_new['obs_date'] = (df_new.sort_values(['person_id','obs_date'])
                            .groupby('person_id')['obs_date']
                            .ffill())

print (df_new)
   person_id   obs_date
0          1 2007-12-31
1          1 2007-12-31
2          3 2009-11-25
3          3 2009-11-25
4          5 2019-10-15
5          5 2019-10-15

我只想使用data.frame(q1 = sample(c(1, 5), 200, replace = T, prob = c(1/2, 1/2)), gender = sample(c("M", "F"), 200, replace = T, prob = c(2/3, 1/3)) ) %>% tapply(.$q1,list(.$gender),FUN=sum) tapplysum,但出现如下错误:

  

tapply(。,。$ q1,list(。$ gender),FUN = sum)错误:         参数必须具有相同的长度

出什么问题了?

1 个答案:

答案 0 :(得分:0)

对于求和示例,可以使用data.table语法:

library(data.table)
df <- data.frame(q1 = sample(c(1, 5), 200, replace = T, prob = c(1/2, 1/2)), 
                 gender = sample(c("M", "F"), 200, replace = T, prob = c(2/3, 1/3)))
as.data.table(df)[, sum(q1), by = gender]

这也可以用于具有多个返回值的函数,这与我之前使用summarize的示例不同:

as.data.table(df)[, shapiro.test(q1), by = gender]