dplyr:在汇总中为向量中的每个变量名称添加新变量。
dplyr:在汇总中为向量中的每个变量名称添加新变量。
我有这段代码:
trimmedMeans <- cleaned %>% filter(TrackName == t & ToBeTrimmed != 1) %>% group_by(TrackName, SpeakerName) %>% summarise(Expectation.Mean = mean(Expectation, na.rm = TRUE), Expectation.Sd = sd(Expectation, na.rm = TRUE), Interesting.Mean = mean(Interesting, na.rm = TRUE), Interesting.Sd = sd(Interesting, na.rm = TRUE), Useful.Mean = mean(Useful, na.rm = TRUE), Useful.Sd = sd(Useful, na.rm = TRUE), OralPresentation.Mean = mean(OralPresentation, na.rm = TRUE), OralPresentation.Sd = sd(OralPresentation, na.rm = TRUE), NumOfVoters = n() )
现在假设有这个向量:
myvars <- c("Expectation", "Interesting", "Useful", "OralPresentation")
我希望使用向量myvars
动态地推广之前的代码块。
问题的出现原因是需要在dplyr中的summarise函数中,为每个变量名添加新的变量。解决方法是使用summarise_at函数,并将要添加的变量名放入一个向量中。具体代码如下:
iris %>% group_by(Species) %>% summarise_at(c("Sepal.Length", "Sepal.Width"), funs(mean, sd), na.rm=TRUE)
这段代码将按照Species进行分组,然后对Sepal.Length和Sepal.Width两个变量进行求均值和标准差的计算。输出结果是一个包含新变量的数据框。
在上述示例中,还存在"NumOfVoters = n()"的情况。是否有一种快速的方法可以在同一语句中添加这个聚合变量呢?
解决方法是使用add_tally函数和summarise_at函数的组合。具体代码如下:
trimmedMeans <- cleaned %>% filter(TrackName == t & ToBeTrimmed != 1) %>% group_by(TrackName, SpeakerName) %>% add_tally() %>% group_by(TrackName, SpeakerName, n, add = FALSE) %>% summarise_at(.vars = speaker.characteristcs, funs(mean, sd), na.rm=TRUE)
这段代码首先根据条件进行筛选,然后按照TrackName和SpeakerName进行分组,并使用add_tally函数添加NumOfVoters变量。接着再次按照TrackName、SpeakerName和n进行分组,并使用summarise_at函数对speaker.characteristcs变量进行求均值和标准差的计算。最终得到含有新变量的数据框trimmedMeans。