R 使用*apply函数就地为数据帧变量分配属性
我想将属性“mean”设置为数据帧中所有变量的变量mean(实际上我正在将Stata文件中的适当属性应用于数据帧,但这本质上就是问题所在)。使用R 使用*apply函数就地为数据帧变量分配属性,r,dplyr,R,Dplyr,我想将属性“mean”设置为数据帧中所有变量的变量mean(实际上我正在将Stata文件中的适当属性应用于数据帧,但这本质上就是问题所在)。使用for循环,可以: test <- mtcars for(var in seq_along(test)) { attr(test[[var]], "name") <- mean(test[[var]]) } str(test) 'data.frame': 32 obs. of 11 variables: $ mpg : atom
for
循环,可以:
test <- mtcars
for(var in seq_along(test)) {
attr(test[[var]], "name") <- mean(test[[var]])
}
str(test)
'data.frame': 32 obs. of 11 variables:
$ mpg : atomic 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
..- attr(*, "name")= num 20.1
$ cyl : atomic 6 6 4 6 8 6 8 4 4 6 ...
..- attr(*, "name")= num 6.19
test与for
循环不同,*apply
函数在其词法范围内运行,而不是在全局环境中运行。我真的不知道这与dplyr
有什么关系,但是你可以检查数据表中的setattr
函数。这是自相矛盾的:apply函数没有正确运行。如果您想避免复制数据帧,您的解决方案很好。
test <- mtcars
apply(test, 2, function(var) {
attr(var, "name") <<- mean(var)
})
mpg cyl disp hp drat
20.090625 6.187500 230.721875 146.687500 3.596563...
str(test)
'data.frame': 32 obs. of 11 variables:
$ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
$ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
$ disp: num 160 160 108 258 360 ...