我有dplyr的som问题,group_by函数没有按预期工作.使用汇总,我希望得到输入到group_by语句中的id和year的每个唯一组合的var1的均值.
此代码应创建一个带有id年观察的df,其中我想为每个id和year组合聚合var 1的均值.但是,这不能按预期工作,输出会忽略id,而只会在年份聚合.
df <- data.frame(id=c(1,1,2,2,2,3,3,4,4,5),
year=c(2013,2013,2012,2013,2013,2013,2012,2012,2013,2013),
var1=rnorm(10))
Run Code Online (Sandbox Code Playgroud)
dplyr代码:
dfagg <- df %.%
group_by(id, year) %.%
select(id, year, var1) %.%
summarise(
var1=mean(var1)
)
Run Code Online (Sandbox Code Playgroud)
结果:
> dfagg
Source: local data frame [8 x 2]
Groups: year
year var1
1 2013 0.22924025
2 2012 -0.93073687
3 2013 -0.82351583
4 2012 0.05656113
5 2013 -0.21622021
6 2012 1.91158209
7 2013 -2.67003628
8 2013 -0.72662276
Run Code Online (Sandbox Code Playgroud)
知道发生了什么事吗?
为了确保没有其他包中断dplyr函数,我尝试了以下相同的结果.
dfagg <- df %.%
dplyr::group_by(id, year) %.%
dplyr::select(id, year, var1) %.%
dplyr::summarise(
var1=mean(var1)
)
Run Code Online (Sandbox Code Playgroud) 我有两组点作为sf
对象存储在 R 中。点对象 x 包含 204,467 个点,点 y 包含 5,297 个点。
理论上,我想计算从 x 中的所有点到 y 中的所有点的距离。我知道这会创建一个庞大的矩阵,但在我的 i7 桌面上使用该st_distance(x, y, by_element=FALSE)
包sf
大约需要 40 分钟。
我想要做的是计算从 x 中的所有点到 y 中的所有点的距离,然后我想将其转换为 a data.frame
,其中包含相应 x 和 y 对点的所有变量。这是因为我希望使用 进行聚合方面的灵活性dplyr
,例如,我想找到 y 中距离 x 10、50、100 公里以内的点的数量,以及其中x$year < y$year
。
我成功创建了距离矩阵,其中包含大约 1,083,061,699 个单元格。我知道这是一种非常低效的方法,但它在聚合方面提供了灵活性。欢迎其他建议。
下面是创建两个 sf 点对象并测量它们之间距离的代码。接下来,我想将其转换为包含 x 和 y 中所有变量的 data.frame,但这是我无法继续的地方。
如果我建议的工作流程不可行,有人可以提供替代解决方案来测量到预定义半径内所有点的距离,并使用 x 和 y 中的所有变量创建结果的 data.frame 吗?
# Create two sf point objects
set.seed(123)
library(sf)
pts1 <- …
Run Code Online (Sandbox Code Playgroud) 我有一个矩阵,我想在列表中复制n次.显然rep()函数不适用于矩阵,所以有人有一个很好的建议如何使这比我下面的代码更好吗?
谢谢!
# Create sample matrix
jwprox <- matrix(ncol=15,nrow=15)
# Create list of n-times matrices
jwprox <- list(jwprox,jwprox,jwprox)
Run Code Online (Sandbox Code Playgroud) 在data.frame上使用dplyr来计算每个字符变量组的缺失观察数时,我有一个奇怪的问题.这会创建错误"错误:列""具有不受支持的类型.
为了复制它,我创建了一个子集.子集rdata文件在这里可用: rdata文件包括dftest data.frame First.使用我提供的子集,代码:
dftest %>%
group_by(file) %>%
summarise(missings=sum(is.na(v131)))
Run Code Online (Sandbox Code Playgroud)
将创建错误:错误:列'file'具有不受支持的类型
str(dftest)返回:
'data.frame': 756345 obs. of 2 variables:
$ file: atomic bjir31fl.dta bjir31fl.dta bjir31fl.dta bjir31fl.dta ...
..- attr(*, "levels")= chr
$ v131: Factor w/ 330 levels "not of benin",..: 6 6 6 6 1 1 1 9 9 9 ...
Run Code Online (Sandbox Code Playgroud)
但是,获取子集的子集并再次运行dplyr命令将创建预期输出.
dftest <- dftest[1:756345,]
dftest %>%
group_by(file) %>%
summarise(missings=sum(is.na(v131)))
Run Code Online (Sandbox Code Playgroud)
str(dftest)现在返回:
'data.frame': 756345 obs. of 2 variables:
$ file: chr "bjir31fl.dta" "bjir31fl.dta" "bjir31fl.dta" "bjir31fl.dta" ...
$ v131: Factor w/ 330 levels …
Run Code Online (Sandbox Code Playgroud)