在使用plyrI 时,我经常发现使用adply标量函数很有用,我必须将其应用于每一行.
例如
data(iris)
library(plyr)
head(
adply(iris, 1, transform , Max.Len= max(Sepal.Length,Petal.Length))
)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species Max.Len
1 5.1 3.5 1.4 0.2 setosa 5.1
2 4.9 3.0 1.4 0.2 setosa 4.9
3 4.7 3.2 1.3 0.2 setosa 4.7
4 4.6 3.1 1.5 0.2 setosa 4.6
5 5.0 3.6 1.4 0.2 setosa 5.0
6 5.4 3.9 1.7 0.4 setosa 5.4
Run Code Online (Sandbox Code Playgroud)
现在我正在使用dplyr更多,我想知道是否有一个整洁/自然的方式来做到这一点?因为这不是我想要的:
library(dplyr)
head(
mutate(iris, Max.Len= max(Sepal.Length,Petal.Length))
)
Sepal.Length Sepal.Width Petal.Length Petal.Width …Run Code Online (Sandbox Code Playgroud) 我有一个像这样的data.frame(真正的数据集有更多的行和列)
set.seed(15)
dd <- data.frame(id=letters[1:4], matrix(runif(5*4), nrow=4))
# id X1 X2 X3 X4 X5
# 1 a 0.6021140 0.3670719 0.6872308 0.5090904 0.4474437
# 2 b 0.1950439 0.9888592 0.8314290 0.7066286 0.9646670
# 3 c 0.9664587 0.8151934 0.1046694 0.8623137 0.1411871
# 4 d 0.6509055 0.2539684 0.6461509 0.8417851 0.7767125
Run Code Online (Sandbox Code Playgroud)
我希望能够编写一个dplyr语句,我可以在其中选择列的子集并对其进行修改.(我正在尝试做类似于在data.table中使用.SDcols的东西).
对于一个简化的例子,这里是我希望能够编写的函数,用于为保持所有其他列的偶数"X"列的和和平均值添加列.使用基数R的期望输出是
(cols<-paste0("X", c(2,4)))
# [1] "X2" "X4"
cbind(dd,evensum=rowSums(dd[,cols]),evenmean=rowMeans(dd[,cols]))
# id X1 X2 X3 X4 X5 evensum evenmean
# 1 a 0.6021140 0.3670719 0.6872308 0.5090904 0.4474437 0.8761623 0.4380811
# 2 b 0.1950439 0.9888592 0.8314290 …Run Code Online (Sandbox Code Playgroud) 我有一个包含这得到了在不同时间点测量多个变量的数据帧(例如test1_tp1,test1_tp2,test1_tp3,test2_tp1,test2_tp2,...).
我现在尝试使用dplyr向数据框添加新列,该数据框计算这些列的选择上的行方式(例如,在所有时间点上的平均值test1).
data %>% ... %>% mutate(test1_mean = mean(test1_tp1, test1_tp2, test1_tp3, na.rm = TRUE)
data %>% ... %>% mutate(test1_mean = mean(matches("test1_.*"), na.rm = TRUE)