我不是一个R新手,但我正在努力教自己如何使用plyr,因为在很多情况下它比编写无尽的循环要快得多!但是,我遇到了一个问题,我似乎无法在这里找到答案,在plyr的文档或其他任何地方 - 至少,不是因为我能够识别它们 . 我不排除他们在那里,我只是不认识他们!
我有一个包含许多列的数据集,我正在寻找一种在所有列上执行多个函数的方法,而无需复制代码并只更改单个参数 . 我已成功找到并使用numcolwise(sd)来获取每个数字列的标准偏差,这是我的第一个大障碍 . 我不打算输入数据集中每列的名称!使用'iris'数据集的示例代码,因为我的数据集令人讨厌:
n<-ddply(iris,"Species",numcolwise(sd)) #Calculate the sd for all numeric columns in the dataset
我明白了
Species Sepal.Length Sepal.Width Petal.Length Petal.Width
1 setosa 0.3524897 0.3790644 0.1736640 0.1053856
2 versicolor 0.5161711 0.3137983 0.4699110 0.1977527
3 virginica 0.6358796 0.3224966 0.5518947 0.2746501
这完全有效,并做我想要的 . 我甚至可以使列名表明它们是标准偏差:
colnames(n)[2:5]<-paste(colnames(s)[2:5],".sd",sep="") #append .sd to all column names
这一切都很棒,我在昨天之前绝对不能这样做 .
好的,所以这就是我的问题所在 . 我正在尝试尽可能高效,我宁愿不只是复制并重新运行ddply函数和colnames函数多次以最终得到sd的数据帧,另一个数据帧为意思是,而另一个是se . 另外,假设我可以找到一种方法来提供多个函数作为numcolwise()的参数,我不知道我会对列名做什么 .
我知道有一些方法可以使用summarize()来计算mean,sd和其他任何东西,当你这样做时,你可以指定列的名称(参见Set column name ddply) . 但我无法弄清楚如何,或者是否,使用sumcolwise的方法可以与numcolwise()和多个函数参数(sd,mean,...)一起使用来得到这样的东西:
Species Sepal.Length.sd Sepal.Width.sd Petal.Length.sd Petal.Width.sd Sepal.Length.mean Sepal.Width.mean Petal.Length.mean Petal.Width.mean
1 setosa 0.3524897 0.3790644 0.1736640 0.1053856 5.006 3.428 1.462 0.246
2 versicolor 0.5161711 0.3137983 0.4699110 0.1977527 5.936 2.770 4.260 1.326
3 virginica 0.6358796 0.3224966 0.5518947 0.2746501 6.588 2.974 5.552 2.026
注意:我知道我可以使用一种使用join()的"brute force"方法来做到这一点,因为我最终会有一个更大的数据集来执行此操作,因为现在我只是处理我的试验数据 .
1 回答
使用
dplyr
非常简单: