我一直在尝试使用dplry进行一些相当复杂的数据操作,并且遇到了这个我无法找到答案的问题 . 这是我在StackOverflow上提出的第一个问题 . 它可能更像是一个分组的data.table问题,而不是dplyr但是这里 .
data(iris)
df <- iris %>% group_by(Species) %>%
do((function(x) {
print(names(x))
print(class(x))
if(x$Species[1] == 'setosa') x$Petal.Length <- x$Petal.Length+1
return(x)
})(.))
在这里,我仍然可以访问分组变量,因为数据保留为data.frame,do内的子组也是data.frame . 显然,整个x $ Species列在do中都是相同的值,所以这个工作就会出现 . 在我看来,“当前组”可能是一个有用的值,可以访问 . 转换为data.table时:
dt <- iris %>% tbl_dt() %>%
mutate(Species2 = Species) %>%
group_by(Species) %>%
do((function(x) {
print(names(x))
print(class(x))
print( attr(x, 'vars'))
print(groups(x))
if(x$Species2[1] == 'setosa') x$Petal.Length <-x$Petal.Length + 1
return(x)
})(.)) %>%
子组x是分组的data.table,分组变量从子组中删除 . 我已经包含了分组列的副本和来自do中的副本的引用,但我觉得应该/可能是一种更优雅的方式来引用do当前正在使用的特定组 .
1 回答
在
data.table
中,分组变量保持为原子值(不是向量),每个组的其余数据保存在data.table
中,称为.SD
. 我正在尝试这样做,但这里有一些例子可能会让你前进: