我试图在 R 中使用 sf 包来查看 sf 对象是否在另一个具有该st_within
函数的sf 对象中。我的问题是这个函数的输出是稀疏几何二进制谓词 -sgbp
我需要一个向量作为输出,以便我可以在dplyr
之后使用该包进行过滤。这是一个简化的示例:
# object 1: I will test if it is inside object 2
df <- data.frame(lon = c(2.5, 3, 3.5), lat = c(2.5, 3, 3.5), var = 1) %>%
st_as_sf(coords = c("lon", "lat"), dim = "XY") %>% st_set_crs(4326) %>%
summarise(var = sum(var), do_union = F) %>% st_cast("LINESTRING")
# object 2: I will test if it contains object 1
box <- data.frame(lon = c(2, 4, 4, 2, …
Run Code Online (Sandbox Code Playgroud) 我正在尝试将以下代码的输出转换为数据帧,其中列表是sfc数据帧,其中列包含简单的要素集合 - 每个观察一个多边形.
以下可重复示例和预期输出的输出:
# Reproducible example:
library(tidyverse)
library(sf)
library(magrittr)
# define radius for circle
radius <- 40
r <- units::set_units(radius, units::as_units("nmile"), mode = "standard")
%>%
units::set_units(units::as_units("m"), mode = "standard")
# Sample data:
df <- data.frame(var = c("abc", "bcd", "cab", "dba"),
lon = c(45,47,1, -109),
lat = c(7, 10, 59, 30))
# Creating simple features with sf:
df <- df %>% st_as_sf(coords = c("lon", "lat"), dim = "XY")
# Applying Coordinate reference system WGS84:
df <- df …
Run Code Online (Sandbox Code Playgroud) 我正在尝试计算cumsum
从每一组的最后一行到第一行的起点.
样本数据:
t1 <- data.frame(var = "a", val = c(0,0,0,0,1,0,0,0,0,1,0,0,0,0,0))
t2 <- data.frame(var = "b", val = c(0,0,0,0,1,0,0,1,0,0,0,0,0,0,0))
ts <- rbind(t1, t2)
Run Code Online (Sandbox Code Playgroud)
所需格式(按分组var
):
ts <- data.frame(var = c("a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a",
"b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b"),
val = c(2,2,2,2,2,1,1,1,1,1,0,0,0,0,0,2,2,2,2,2,1,1,1,0,0,0,0,0,0,0))
Run Code Online (Sandbox Code Playgroud) 尝试根据多个条件和时间间隔条件连接 2 个数据帧,如下例所示:
# two sample dataframes with time intervals
df1 <- data.frame(key1 = c("a", "b", "c", "d", "e"),
key2 = c(1:5),
time1 = as.POSIXct(hms::as.hms(c("00:00:15", "00:15:15", "00:30:15", "00:40:15", "01:10:15"))),
time2 = as.POSIXct(hms::as.hms(c("00:05:15", "00:20:15", "00:35:15", "00:45:15", "01:15:15")))) %>%
mutate(t1 = interval(time1, time2)) %>%
select(key1, key2, t1)
df2 <- data.frame(key1 = c("b", "c", "a", "e", "d"),
key2 = c(2, 6, 1, 8, 5),
sam1 = as.POSIXct(hms::as.hms(c("00:21:15", "00:31:15", "00:03:15", "01:20:15", "00:43:15"))),
sam2 = as.POSIXct(hms::as.hms(c("00:23:15", "00:34:15", "00:04:15", "01:25:15", "00:44:15")))) %>%
mutate(t2 = interval(sam1, sam2)) …
Run Code Online (Sandbox Code Playgroud) 我试图使用内部联接或左联接联接两个SF数据帧。这些数据框均在内部具有几何列。我不断收到错误:
check_join(x,y)中的错误:y应该是data.frame; 对于空间连接,请使用st_joinFALSE
以下是可重现的示例:
df1 <- data.frame(
var = c("a", "b", "c"),
lon1 = c(20,35,45),
lat1 = c(50,10,15)
) %>% st_as_sf(coords = c("lon1", "lat1"), dim = "XY") %>%
st_set_crs(4326)
df2 <- data.frame(
var = c("a", "b", "c"),
lon2 = c(15,25,35),
lat2 = c(5,10,15)
) %>% st_as_sf(coords = c("lon2", "lat2"), dim = "XY") %>%
st_set_crs(4326)
df <- inner_join(df1, df2, by = "var")
Run Code Online (Sandbox Code Playgroud)
我不想删除几何图形,因为我认为那以后可能会弄乱我的结果,但是欢迎任何解决方案
我试图找到这个问题的答案,但找不到。如果有答案,我会道歉并立即删除我的问题。
我正在尝试将几行合并为一行(此计算应该在组上单独完成,在这种情况下id
可以使用变量进行分组),以便不留下 NA 值。
# initial dataframe
df_start <- data.frame(
id = c("as", "as", "as", "as", "as", "bs", "bs", "bs", "bs", "bs"),
b = c(NA, NA, NA, NA, "A", NA, NA, 6, NA, NA),
c = c(2, NA, NA, NA, NA, 7, NA, NA, NA, NA),
d = c(NA, 4, NA, NA, NA, NA, 8, NA, NA, NA),
e = c(NA, NA, NA, 3, NA, NA, NA, NA, "B", NA),
f = c(NA, NA, 5, NA, NA, NA, …
Run Code Online (Sandbox Code Playgroud) 我想知道是否有办法linestring
从新几何列的数据框中的同一行中给定的两个点创建。换句话说,两个点的经度和纬度在数据框中给出,如下所示:
df <- data.frame(id = c("a", "b"), lon1 = c(1,2), lat1 = c(3,4), lon2 = c(5,6), lat2 = c(7,8))
Run Code Online (Sandbox Code Playgroud)
其中lon1
和lat1
表示所述第一点的坐标和lon2
与lat2
为第二点的坐标。所需的数据帧将具有两行和两列-该id
列和一geometry
列。
我尝试过,sf::st_linestring
但似乎此功能仅适用于矩阵。
所需的数据框:
desired_df <- data.frame(id = c("a", "a", "b", "b"), lon = c(1,2,5,6), lat = c(3,4,7,8)) %>% st_as_sf(coords = c("lon", "lat"), dim = "XY") %>% st_set_crs(4236) %>% group_by(id) %>% summarise(geometry = st_union(geometry), do_union = FALSE) %>% st_cast("LINESTRING")
Run Code Online (Sandbox Code Playgroud) 我想每次使用函数的输出在矢量上应用相同的函数一定次数.
一个带有简单函数的简化示例,仅用于演示:
# sample vector
a <- c(1,2,3)
# function to be applied n times
f1 <- function(x) {
x^2 + x^3
}
Run Code Online (Sandbox Code Playgroud)
我想申请f1
上a
,n
次数,例如这里可以说3次.
我听说purrr::reduce
或者purrr::map()
可能是个好主意,但无法使其发挥作用.
期望的输出如果n = 3
等于f1(f1(f1(a)))
.
我试图让将要使用的功能ggplot2
中,aes_string
并reorder
但至今没有运气。
基本上,如果我们有一个如下所示的示例数据集:
library(ggplot2)
library(dplyr)
set.seed(123)
dt <- data.frame(
id = c(1,1,1,2,2),
a = c("b", "d", "c", "a", "b"),
b = sample(1:10, 5, replace = F),
cat = c(1,1,2,2,2)) %>%
mutate(a = as.factor(a)) %>%
as_tibble()
Run Code Online (Sandbox Code Playgroud)
我希望该函数接受以下参数:数据集、过滤变量和用于绘图的两个变量。
这就是我设法做的:
myplot <- function(df, filtval, var1, var2) {
data <- df %>% filter(id == filtval)
ggplot(data) +
geom_point(
aes_string(
x = reorder(var1, var2),
y = var2)
)
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,当运行它返回错误:
myplot(dt, 1, "a", "b")
Warning message:
In mean.default(X[[i]], ...) : …
Run Code Online (Sandbox Code Playgroud) 我正在尝试将列表转换为单个字符值,或者基本上是从此开始:
test <- data.frame(a = c(1,1,1,2,2,2), b = c("a", "b", "c", "d", "e", "f" )) %>%
group_by(a) %>% summarise(b = list(b))
Run Code Online (Sandbox Code Playgroud)
对此:
test <- data.frame(a = c(1,2), b = c("a, b, c", "d, e, f" ))
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个闪亮的应用程序,用户可以在其中上传 .csv 文件,然后在该数据帧上应用过滤器,然后使用 ggplot2 绘制绘图。不幸的是,当我尝试从来自应该上传的 .csv 的变量创建选择输入菜单时,我偶然发现了一个问题。
要创建一个简单的示例,我们可以将diamonds
数据集导出ggplot2
为 .csv 文件:
write.csv(diamonds, "diamonds.csv")
Run Code Online (Sandbox Code Playgroud)
然后创建闪亮的应用程序:
library(shiny)
library(shinyWidgets)
library(ggplot2)
ui <- fluidPage(
titlePanel("test shiny"),
# Sidebar with a slider input for number of bins
sidebarLayout(sidebarPanel(
fileInput('file1', 'Choose file to upload',
accept = c(
'text/csv',
'text/comma-separated-values',
'text/tab-separated-values',
'text/plain',
'.csv',
'.tsv'
)
),
tags$hr(),
pickerInput(
inputId = "caratx",
label = "Choose carat",
choices = c("Select all", unique(user_data$carat)),
multiple = TRUE
),
selectInput(
inputId = "clarityx",
label = "Choose distance: ",
choices …
Run Code Online (Sandbox Code Playgroud)