gpt4 book ai didi

r - 在 lapply 中操作函数

转载 作者:行者123 更新时间:2023-12-02 01:15:58 24 4
gpt4 key购买 nike

对于外面的人来说,这应该是一个简单的问题......

我有一个如下所示的数据框:

df1
longitude lattitude 10000 5 1.5 1.4 1.3 1.2 1 0.5 0.1 0.001
0 -119.8304 34.44190 107 14 8 8 8 8 7 5 5 1
1 -119.6768 34.41962 107 19 5 5 5 5 5 3 2 1
2 -119.7162 34.41911 107 25 9 8 8 5 4 1 1 1
3 -119.7439 34.44017 107 22 7 7 6 5 5 2 1 1

这是由这段代码创建的:

library(geosphere)

df1 <- data.frame(longitude=c(-119.8304, -119.6768, -119.7162, -119.7439, -120.4406, -119.5296, -120.4198, -119.8221, -119.7269, -120.4252, -120.4573, -120.4581),
lattitude=c(34.44, 34.42, 34.42, 34.44, 34.64, 34.41, 34.94, 34.44, 34.44, 34.97, 34.65, 34.65))
boundary <- c(10000, 5, 1.5, 1.4, 1.3, 1.2, 1, 0.5, 0.1, 0.001)
names(boundary) <- boundary
df1 <- cbind(df1, lapply(boundary, function(x) rowSums(distm(df1, fun = distHaversine) / 1000 <= x)))

但我需要对数据框 df1 中的值进行操作,以便除 latitudelongitude 之外的所有列中的值将除以 pi*x^2(pi 乘以 x 的平方)。在这种情况下我可以使用 lapply 吗?

输出应该是这样的:

df1
longitude lattitude 10000 5 1.5 1.4 1.3 1.2 1 0.5 0.1 0.001
0 -119.8304 34.44190 0 0.177 1.12 1.29 etc...

最佳答案

我们可以使用 setdiff 来获取数据集的名称,除了 'longitude', 'lattitude' 列。然后遍历列的子集,进行计算,更新数据集

j1 <- setdiff(names(df1), c("longitude", "lattitude"))
df1[j1] <- lapply(df1[j1], function(x) x/(pi*x^2))

或者我们可以使用tidyverse

library(dplyr)
df1 %>%
mutate_at(vars(-matches("longitude", "lattitude")), funs(./(pi*.^2)))

关于r - 在 lapply 中操作函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42619552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com